mysql_query подскажите как объединить

KK
На сайте с 25.07.2006
Offline
138
810

Нужно объединить два запроса $newitems и $newitems2 в один:

$newitems = mysql_query("SELECT * FROM items, items_info

WHERE items.i_id = items_info.ii_item_id AND items.i_options IN (7, 15)");

while ($myrow = mysql_fetch_array($newitems)){

$newitems2 = mysql_query("SELECT * FROM items, items_info

WHERE items.i_id = items_info.ii_item_id AND items_info.ii_title = '{$myrow['ii_title']}'

AND items.i_options = 3");

}

ДП
На сайте с 23.11.2009
Offline
203
#1

SELECT * FROM items as i1, items_info as ii1, items as i2, items_info as ii2,

WHERE i1.i_id = ii1.ii_item_id AND ii1.ii_title = ii2.ii_title AND i2.i_options IN (7, 15)
AND items.i_options = 3

Может так?

Хотя расскажите на словах, что у вас там выбирается? Вроде ищете названия каких-то опций и потом выбираете опции с тем же названием, но с признаком 3?

Или пытаетесь найти записи, у которых есть признаки (7 и 3 ) или (15 и 3)?

KK
На сайте с 25.07.2006
Offline
138
#2

Попробую объяснить. Сайт интернет-магазина. Есть главный товар и есть разновидности этого товара. Опцию "новинка" можно поставить только на главный товар. Мне нужно вывести все "новинки" + все дополнительные товары у которых главный "новинка".

Главный товар и дополнительные товары связаны только именем - т.е. поле ii_title у них всех одинаковое. Главный товар отличается только тем, что кроме названия у него есть еще описание и т.д. и т.п. А у дополнительных товаров есть только название, одна строчка характеристики и цена - и все.

i_option = 3 если товар есть в наличии

i_option = 7 если товар есть в наличии и он новинка

i_option = 15 если товар есть в наличии и он новинка и на него есть акция

---------- Добавлено 23.01.2012 в 20:32 ----------

Еще вариант запроса:

$newitems = mysql_query("SELECT * FROM items, items_info WHERE items.i_id = items_info.ii_item_id AND items.i_options IN (3, 7, 15) ORDER BY items.i_default_category ASC, items_info.ii_title ASC");

if (mysql_num_rows($newitems) > 0){

while ($myrow = mysql_fetch_array($newitems)){

$newitems2 = mysql_query("SELECT * FROM items, items_info WHERE items.i_id = items_info.ii_item_id AND items.i_options IN (7, 15) AND items_info.ii_title = '{$myrow['ii_title']}'");

if (mysql_num_rows($newitems2) > 0){

ДП
На сайте с 23.11.2009
Offline
203
#3

Понятно теперь что хотите.

А вот мой запрос не проходит, который в посте выше?

SELECT * FROM items as i1, items_info as ii1, items as i2, items_info as ii2,
WHERE i1.i_id = ii1.ii_item_id AND ii1.ii_title = ii2.ii_title AND i2.i_options IN (7, 15)
AND i1.i_options = 3

Только поправленный, в последнем условии алиас забыл использовать. И, видимо, надо будет колонки руками перечислить, которые надо выбрать, а то совпадать имена будут.

KK
На сайте с 25.07.2006
Offline
138
#4

Не работает. Пишет mysql_num_rows(): supplied argument is not a valid MySQL result resource

Тут еще один нюанс - дополнительным товарам, у которых i_option = 3 нужно присвоить id главного товара, у которого i_option = 7 или 15. Это реально в одном запросе сделать или проще уже как я написал второй запрос? Как это сделать в моем варианте я знаю и уже сделал, но если можно красивей реализовать, было бы лучше.

---------- Добавлено 23.01.2012 в 20:50 ----------

Т.е. мой громоздкий вариант:

$newitems = mysql_query("SELECT * FROM items, items_info WHERE items.i_id = items_info.ii_item_id AND items.i_options IN (3, 7, 15) ORDER BY items.i_default_category ASC, items_info.ii_title ASC");

if (mysql_num_rows($newitems) > 0){

while ($myrow = mysql_fetch_array($newitems)){

$newitems2 = mysql_query("SELECT * FROM items, items_info WHERE items.i_id = items_info.ii_item_id AND items.i_options IN (7, 15) AND items_info.ii_title = '{$myrow['ii_title']}'");

if (mysql_num_rows($newitems2) > 0){

$myrow2 = mysql_fetch_array($newitems2);

$id = $myrow['i_id'];

$myrow['i_id'] = $myrow2['i_id'];

ДП
На сайте с 23.11.2009
Offline
203
#5

Мой запрос надо как минимум переписать, чтобы там звездочки в селекте не было.

А так, если товаров у вас много - то я бы не стал джойнить эту таблицу саму на себя. И вариант с джойном я бы красивым уж точно не назвал :)

Что-то голова не варит к ночи :(

KK
На сайте с 25.07.2006
Offline
138
#6

хм. ну тогда буду по-своему делать. громоздко, но работает. Всеравно спасибо большое! :) теперь хоть больше понимаю как можно объединять.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий