MySQL возвращает один и тот же товар

Ниже SQL запрос, проблема в том, что он выводит один и тот же товар 4 раза.
Как объяснить MySQL, что нужно одинаковые не выводить.
SELECT * FROM `catalog` as c 
INNER JOIN atributes AS a1 ON c.art = a1.art 
INNER JOIN atributes AS a2 ON c.art = a2.art
WHERE c.catalog_3 = "Видеокарты" 
AND c.price != "0" 
AND c.avail != "0" 
AND a1.names = "Производитель" 
AND a1.value = "ASUS" 
AND a2.names = "Графический процессор" 
AND a2.value = "AMD Radeon HD 7770" 
ORDER BY price ASC LIMIT 0, 15

screen.png
  • Вопрос задан
  • 2550 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У Вас один товар с `catalog`.`id`=97 имеет в описании дважды атрибут "Производитель" (`attributes`.`id`=4426 и `attributes`.`id`=394) и дважды атрибут "Графический процессор" (`attributes`.`id`=395 и `attributes`.`id`=4427). Таким образом, произведение множеств даёт четыре варианта:
(97, 4426, 395)
(97, 394, 395)
(97, 4426, 4427)
(97, 394, 4427)

Лучше всего удалить лишние атрибуты, но можно сделать и GROUP BY `c`.`id`, только серверу добавится работы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
shineblu
@shineblu
Добрый день,

Добавьте DISTINCT после SELECT (и если все поля которые возвращает запрос - одинаковые, будет отображена только 1 запись)

Успехов!
Ответ написан
metamorph
@metamorph
У Вас в таблице atributes у записей с id 4426 и 394 одинаковые артикулы (708089), отсюда и дублирование.

По идее, так быть не должно, исправьте, поставьте проверку на unique.

Если же это какой-то хитроумный ход - тогда не могу предложить ничего лучше group by id (что, кстати, совершенно неверно с точки зрения sql, правильное решение несколько длинее, но mysql схавает и такое).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы