Помогите составить sql запрос

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Две таблицы, одна основная - магазин(id,name,opisanie и т.д). Другая содержит id купленных вещей юзерами из первой основной таблицы.
Нужно вывести на страницу все товары, кроме тех, которые купил пользователь.
Попробовал использовать "left join" [см ниже]
Этот вариант выводит всё подряд:
Код:
select `shop`.`name`, `us`.`id_tovar`
from `shop`
left join `user_shop` as `us`
on `shop`.`id` = `us`.`id_tovar` and `us`.`id_login` = 1
На выходе получаю поле "id_tovar" - какое-то число, значит куплено. Или NULL если пользователь не покупал этот товар. Решил добавить where, но он вообще ничего не выводит:
Код:
select `shop`.`name`, `us`.`id_tovar`
from `shop`
left join `user_shop` as `us`
on `shop`.`id` = `us`.`id_tovar` and `us`.`id_login` = 1
where
`us`.`id_tovar` = NULL
Вопрос можно решить конечно как-то так:
Взять все id, которые купил пользователь [запрос 1]
Вывести на страницу все товары из основной таблицы, но добавить условие "not in()", в котором будут содержаться id из первого запроса.
Но это лишний запрос, лишний код и вообще мне этот вариант не нравится.
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Но это лишний запрос, лишний код и вообще мне этот вариант не нравится.
Ну прям какие-то гламурные программисты. "Меня раздражает эта кофточка, сумочка... и вообще я ноготь сломала...".

Кажется мне подвел тебя символ равно здесь:
Код:
where `us`.`id_tovar` = NULL
Нужно:
Код:
where `us`.`id_tovar` IS NULL
http://sqlfiddle.com/#!2/787f3/1
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=brevis], плюсую) сам вчера посидел над этим запросом, но стер ответ ибо искал может покрасивше найду. Кстати, первое впечатление от вопроса у меня было именно такое же:
Ну прям какие-то гламурные программисты. "Меня раздражает эта кофточка, сумочка... и вообще я ноготь сломала...".
НО! Потом я вспомнил, что [member=FiRеFоX] наш игру делает, а в играх количество магазинов - не один и покупок количество сравнимо с реально большими интернет магазинами. Так что джоины очень оправданное решение, хотя и не по причине "мне не нравится", а работать быстрее будет, но тут еще индексация таблиц важна.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
спасибо за помощь, а также за любезную критику :biggrin: Пойду фиксить)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ