E
E
Edward2020-06-01 18:15:34
MySQL
Edward, 2020-06-01 18:15:34

Selecting different data from 1 column?

There is a table with different values ​​in it
5ed51aec0c7c1915736856.png
There is a query

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'

Let's say you need to make a choice pf.text = '9' and pf.text = '4' and use this query
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'

The answer is 0 results. What is the correct way to write to select 2 or more values?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
G
galaxy, 2020-06-01
@galaxy

pf.text = '9' AND pf.text = '4'- what value of text do you think will trigger this condition?

A
AUser0, 2020-06-01
@AUser0

In fact, the option
.... cp.path_id = '13' AND pf.text IN ('9', '4')
is completely correct, and is equivalent to this:

.... cp.path_id = '13' AND (pf.text = '9' OR pf.text = '4')

L
Lazy @BojackHorseman MySQL, 2020-06-01
Tag

... 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')

index (product_id, attribute_id, text)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question