@EdOther
Student - Programmer

Выбор разных данных из 1 столбца?

Есть таблица и в ней разные значения
5ed51aec0c7c1915736856.png
Есть запрос
SELECT p.product_id, pf.text, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_category_path cp LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) LEFT JOIN oc_product_attribute pf ON (p2c.product_id = pf.product_id) LEFT JOIN oc_product p ON (pf.product_id = p.product_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND cp.path_id = '13' AND pf.text = '9'

Допустим нужно сделать выбор pf.text = '9' и pf.text = '4' и использовать такой запрос
SELECT p.product_id, pf.text, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_category_path cp LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) LEFT JOIN oc_product_attribute pf ON (p2c.product_id = pf.product_id) LEFT JOIN oc_product p ON (pf.product_id = p.product_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND cp.path_id = '13' AND pf.text = '9' AND pf.text = '4'

В ответ 0 результатов. Как нужно правильно записать для выбора 2-х или нескольких значений?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 3
@galaxy
pf.text = '9' AND pf.text = '4' - как вы думаете, при каком значении text это условие сработает?
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вообще-то вариант
.... cp.path_id = '13' AND pf.text IN ('9', '4')
совершенно корректен, и равнозначен этому:
.... cp.path_id = '13' AND (pf.text = '9' OR pf.text = '4')
Ответ написан
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
... AND EXISTS(SELECT 1 FROM `tablename` WHERE product_id = ? AND attribute_id = ? AND `text` = '4')
... AND EXISTS(SELECT 1 FROM `tablename` WHERE product_id = ? AND attribute_id = ? AND `text` = '9')


индекс (product_id, attribute_id, text)
Ответ написан
Ваш ответ на вопрос

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

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