Имеется таблица базы данных товаров всего из двух столбцов - id_товара, id_категория_товара. Товар может находиться в нескольких категориях. Мне необходимо сделать выборку товаров, которые входят в определенную категорию (например id_категория_товара=64) и еще куда-нибудь. Куда еще входят - неважно. Помогите, пожалуйста, советом! Нужен правильный SQL-запрос.
Совет. Self JOIN Правильный запрос Код (Text): SELECT `t1`.*,`t2`.* FROM `tablename` as `t1`, `tablename` as `t2` WHERE `t1`.`cid` = 64 AND `t2`.`cid` != 64 AND `t2`.`pid` = `t1`.`pid`
сформулировано неоднозначно. "и еще куда-нибудь" — то есть (а) у каждого товара в выборке должно быть две или более категорий, одна из которых указана, так? Непонятно как это сочетается к заголовком про уникальные значения. ИЛИ (б) ты имел в виду что неважно одна категория у товара или их много? Вот это лехкотня. ))) --- Добавлено --- Посчитать количество категорий у товара можно сгруппировав по товару Код (Text): SELECT product_id, COUNT(*) AS category_count, GROUP_CONCAT(category_id) AS category_ids FROM category_product GROUP BY product_id HAVING COUNT(*) > 1 последняя строчка значит "выбрать только те товары, которые встречаются более одного раза. другими словамии, у которых две или более категорий. --- Добавлено --- Случай (б), сначала делаем что полегче: Код (Text): SELECT product.* FROM product INNER JOIN category_product ON category_product.product_id = product.id WHERE category_product.category_id = :ID --- Добавлено --- Случай (а): Код (Text): SELECT product.* FROM product INNER JOIN category_product ON category_product.product_id = product.id WHERE category_product.category_id = :ID AND product.id IN ( SELECT cp2.product_id FROM category_product AS cp2 GROUP BY cp2.product_id HAVING COUNT(*) > 1 ) https://www.db-fiddle.com/f/mt84JKCDdP2Zs7ZrryVWeP/0 --- Добавлено --- Пекреношу в другой раздел, т.к. PHP в теме вообще не при чём.