TransWikia.com

Как правильно сделать запрос в бд для выбора по нескольким значениям одного поля

Stack Overflow на русском Asked on November 10, 2021

Таблица такого вида:

|product_id| |atribute_id| | text  |
|     1    | |    28     | |золото |
|     1    | |    29     | |  255  |
|     2    | |    28     | |серебро|
|     2    | |    29     | |  111  |
|     3    | |    28     | |золото |
|     3    | |    29     | |  455  |

Есть Вес atribute_id = 29 и материал atribute_id = 28, данные text получаю из формы:

$get_ves = $_POST['f__ves'];  // Вес
$get_material = $_POST['f__material'];  // Материал

Нужно получить массив product_id, в соответсвии с полученными данными, к примеру получили Золото и 255 и 455, поэтому должны получить $product_id со значениями 1 и 3.
ПРобовал выполнить вот такой sql запрос:

"SELECT * FROM `oc_product_attribute` WHERE (product_id, attribute_id, text) in(('" . $prod_id . "', 28, '" . $get_ves_item . "'), ('" . $prod_id . "', 29, '" . $get_materail_item . "')) "

Но получил только фильтрацию по (‘" . $prod_id . "’, 28, ‘" . $get_ves_item . "’) второй параметр IN не учелся почему то… ПОдскажите в чем проблема, заранее спасибо

One Answer

Если у вас одно значение Материал и массив значений Вес, то:

SELECT product_id FROM oc_product_attribute
WHERE text IN ("золото", "серебро") AND product_id IN (
   SELECT product_id FROM oc_product_attribute 
   WHERE atribute_id = 29 AND text IN (255, 455)
) GROUP BY product_id

Answered by Максим Степанов on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP