Просьба помочь с запросом (distinct, left join)

Asar

Новичок
Просьба помочь с запросом (distinct, left join)

Таблички:
parts - id товара, id брэнда
brands - id брэнда, название брэнда
basket - id товара.

Мне нужно вывести все уникальные названия брэндов тех товаров, что в корзине.
Пока сделал только
SELECT basket.Id, parts.Brand_Id, brands.Caption FROM basket LEFT JOIN parts ON parts.Id = basket.Id LEFT JOIN brands ON brands.Id = parts.Brand_Id ".$Where." AND NOT ISNULL(`Caption`) ORDER BY Caption

В результате чего брэнды выводятся, но с повторами (если имеется 3 товара марки HP, то HP и выведется 3 раза).
Долго ломаю голову надо вопросом, но пока не доломал.

Т. е. если приткнуть distinct после select - будет выборка уникальных значений из корзины, а как ее сделать из брэндов - до меня не доходит. Если это вообще возможно с помощью одного запроса...

Хелп...
 

Asar

Новичок
Гм... Так если делать FROM basket, то ничего не изменяется, а делать FROM parts - мне же корзиночные данные то все-таки нужны... Или я чего то не догоняю?
 

Demiurg

Guest
весь остальной запрос остается таким же

кстати, а зачем тебе тут left join ? да еще и со странныи AND NOT ISNULL(`Caption`) ?
 

Asar

Новичок
SELECT DISTINCT parts.Brand_Id, brands.Caption, basket.Id FROM basket LEFT JOIN parts ON parts.Id = basket.Id LEFT JOIN brands ON brands.Id = parts.Brand_Id ".$Where." AND NOT ISNULL(`Caption`) ORDER BY Caption

Делаю так. Результат остается тем же, что и был ранее... ?

left join - а как я еще подцеплю parts.Brand_Id к basket и brands.Caption к parts?

NOT ISNULL - у некоторых записей поле Caption может быть незаполненно. Т. о. я их исключаю. Или здесь что то неверно?
 

Demiurg

Guest
еще раз
SELECT distinct parts.Brand_Id, brands.Caption from ....

left join как раз и нужен для случаев, когда в одной таблице нет записей ссылающихся на другую. Тебе нужен обычный join.
 

Asar

Новичок
SELECT distinct parts.Brand_Id, brands.Caption from ....

Все, дошло. Я так попробовал, было, но мне ошибка вылезла майэскуельная, видать, обновил страницу не так)

По поводу лефт джойна - как только делаю просто джойн, сразу грит, что рядом с ним ошибка. В чем я не прав?
 

Demiurg

Guest
>В чем я не прав?
очевидно, в синтаксисе
 

Asar

Новичок
А как найти ошибку в синтаксисе, если оно пишет в ошибке только near... - т. е. около JOIN вместо LEFT JOIN?
 

Asar

Новичок
SELECT DISTINCT parts.Brand_Id, brands.Caption FROM basket LEFT JOIN parts ON parts.Id = basket.Id LEFT JOIN brands ON brands.Id = parts.Brand_Id WHERE UserId = 1 AND NOT ISNULL(`Caption`) ORDER BY Caption
В таком виде все Ок.
Если изменить один или оба LEFT JOIN на JOIN - выдается вышеописанная ошибка.
В чем я не прав?
 

Demiurg

Guest
по идее ошибок быть не должно. какая версия mysql ?
 

Asar

Новичок
Demiurg
3.23.43
alpine
Я выгребаю уникальные брэнды из таблицы корзины...
 

Asar

Новичок
Да, действительно, сейчас загрузил к хостеру - у него сработало, там маскуель поновее стоит... Пасиб...
 
Сверху