Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Есть таблица:
Отредактированно yellowcat (14.02.2015 17:12:55)
Неактивен
Неактивен
vasya написал:
SELECT `product_id`
FROM `product2performance`
WHERE performance_id = ((1 OR 3) AND 4 AND (6 OR 7))
GROUP BY `product_id`
HAVING count(*)=3;
Ваш запрос не работает:
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0032 сек. ) в то время как мой запрос возвращал 3 записи...
Вот рабочий вариант, на основе вашей идеи с count и having
Отредактированно yellowcat (15.02.2015 12:29:03)
Неактивен
Да, это я скопировал условие из постановки задачи не задумавшись.
Оптимальный вариант:
Неактивен
vasya написал:
Да, это я скопировал условие из постановки задачи не задумавшись.
Оптимальный вариант:SELECT `product_id`
FROM `product2performance`
WHERE
performance_id IN (1,3,4,6,7)
GROUP BY `product_id`
HAVING count(*)=3
Ну и индекс на performance_id.
Чем обусловлен порядок полей в primary?
Спасибо. Запрос работает нормально.
Порядок полей в primary обусловлен тем, что пара должна быть уникальна. + я использую yii, а там это вроде бы как обязательное условие.
а что с ними не так?
Неактивен
Уникальность пары от порядка полей в индексе не зависит.
Для того, чтобы искать продукт по характеристикам (как, например, в запросе выше) нужна другая последовательность - (`performance_id`,`product_id`)
Подробнее можно посмотреть FAQ №5
Неактивен
спасибо. не первый раз выручаете!
Неактивен