Премини към съдържанието
TheLord_d

Селект на 2 таблици

Препоръчан отговор


Здравейте

Имам следният проблем.Значи имам 2 таблици в базата данни - `products` и 'products_to_categories' .Искам да селектирам 2-те таблици ,но амо по ID на категорията ,към която спада продукта.

function genrelist() {

    $ret = array();

    $res = mysql_query("SELECT products_model,products_price FROM products,products_to_categories WHERE products_to_categories.categories_id = 9");

 while ($row = mysql_fetch_array($res))

        $ret[] = $row;

    return $ret;

}



Следва визуализацията :



<select name="type" style="HEIGHT: 22px; WIDTH: 240px" onchange="ChangeSelection(this.form, 0)">


    <option value=0>*****************************</option>

 <?

    $cats = genrelist();

$catdropdown = "";

foreach ($cats as $cat) {

    $catdropdown .= "<option value=\"" . $cat["products_price"] . "\"";

    if ($cat["products_price"] == $_GET["cat"])

        $catdropdown .= " selected=\"selected\"";

    $catdropdown .= ">" . htmlspecialchars($cat["products_model"]) . "</option>\n";

}

?>

<?= $catdropdown ?>

   </select>

Проблемът е ,че ми показва всички продукти а не само от категория ID = 9 .

В таблица 'products' имам следните полета :

products_id , products_quantity , products_model , products_image , products_price products_date_added , products_last_modified , products_date_available , products_weight products_status , products_tax_class_id , manufacturers_id , products_ordered

в 'products_to_categories' са :

products_id и categories_id

Значи идеята ми е такава.Имам таблица с 3 колони.Искам за всяка категория да отговаря продукт и след избирането на продукта в 3-тата колона да се визуализира стойността му.

Ако някой има решение на въпроса,моля да пише.Благодаря предварително.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Select products_to_categories.* FROM products_to_categories JOIN categories WHERE (products_to_categories.categories_id=categories.categories_id AND categories.categorie_id=9);

или на прост български език:

ИЗБЕРИ products_to_categories.всичко ОТ products_to_categories СЪБЕРИ СЪС categories КЪДЕТО (products_to_categories.индекс на категория = categories.индекс на категория И КЪДЕТО categories.индекс на категория = 9);

Редактирано от Maverick (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
Select products_to_categories.* FROM products_to_categories JOIN categories WHERE (products_to_categories.categories_id=categories.categories_id AND categories.categorie_id=9);

или на прост български език:

ИЗБЕРИ products_to_categories.всичко ОТ products_to_categories СЪБЕРИ СЪС categories КЪДЕТО (products_to_categories.индекс на категория = categories.индекс на категория И КЪДЕТО categories.индекс на категория = 9);

<{POST_SNAPBACK}>

Пробва ли го това дали сработва ? Защото така на пръв поглед ме съмнява.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Мне..неработи.Резултатът е същият както преди...Вади си ми всички продукти , нищо че съм му казал да са само от категория = 8 примерно


Сподели този отговор


Линк към този отговор
Сподели в други сайтове
Мне..неработи.Резултатът е същият както преди...Вади си ми всички продукти , нищо че съм му казал да са само от категория = 8 примерно

<{POST_SNAPBACK}>

Ок де покажи ми explain на categories и product_to_categories

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Кодът който написах по-горе работи, въпросът е дали си направил таблиците както трябва.

Таблица категории:

1. индекс (int)

2. описание (varchar or text)

3. описание (varchar or text)

4 ....

Таблица продукти:

1. индекс (int)

2. външен индекс (int) -> описва към коя категоря принадлежи продукта. Т.е. тук слагаш индекса на категорията.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
Кодът който написах по-горе работи, въпросът е дали си направил таблиците както трябва.

Таблица категории:

1. индекс (int)

2. описание (varchar or text)

3. описание (varchar or text)

4 ....

Таблица продукти:

1. индекс (int)

2. външен индекс (int) -> описва към коя категоря принадлежи продукта. Т.е. тук слагаш индекса на категорията.

<{POST_SNAPBACK}>

Индекса в случая не е необходим проблема му е грешна sql заявка.

Според мен трябва да е нещо от сорта на :

select pole1,pole2... from table left join table2 on table.id=table2.otherid where id=9 group by 'neshto';

Но не мога да ти кажа точната заявка без да съм видял структурута на таблиците , а и въпроса е зададен доста неясно.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Това е структурата на таблица 'products'

Поле                      Тип      Колация Атрибути Празно По подразбиране Допълнително

products_id            int(11)                      не                                        auto_increment     

products_quantity      int(4)                      не        0               

products_model        varchar(50) latin1_swedish_ci  да      NULL               

products_image        varchar(64) latin1_swedish_ci  да      NULL               

products_price        decimal(15,4)                  не      0.0000               

products_date_added  datetime                      не      0000-00-00 00:00:00               

products_last_modified  datetime                    да      NULL               

products_date_available datetime                    да      NULL               

products_weight      decimal(5,2)                  не      0.00               

products_status      tinyint(1)                    не      0               

products_tax_class_id  int(11)                      не      0               

manufacturers_id      int(11)                      да      NULL               

products_ordered        int(11)                      не      0             

А това е на 'products_to_categories'

Поле                Тип      Колация Атрибути Празно По подразбиране

products_id      int(11)                                  не        0               

categories_id    int(11)                                  не        0             

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

SELECT products_model,products_price FROM products,products_to_categories WHERE products_to_categories.categories_id = 9 AND products.products_id = products_to_categories.products_id

Така не става ли? JOIN директивата е малко остаряла и доста DBMS-и сами решават как да обединяват таблиците. Ако случаят е такъв, провери дали коректно си задал връзката едно към много между таблиците.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
SELECT products_model,products_price FROM products,products_to_categories WHERE products_to_categories.categories_id = 9 AND products.products_id = products_to_categories.products_id

Мерси много точно това ми трябва и проработи :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.