Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL заявка за търсене в множество атрибути и value_id

Изглежда, че трябва да използвате GROUP BY и HAVING клаузи.

SELECT
    `product_id`,
    COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
   (`attr_id` = ? AND `value_id` = ?)
   OR (`attr_id` = ? AND `value_id` = ?)
   /* additional as necessary
   OR (`attr_id` = ? AND `value_id` = ?)
   */
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */

Уверете се, че имате уникален индекс в product_id и attr_id за да работи това правилно (вече трябва да имате това, тъй като вероятно няма да има смисъл продуктът да има множество записи със същия attr_id ).

Трябва също така да се уверите, че избягвате стойностите си за използване във вашия SQL, ако все още не сте. Показвам тези променливи тук с ? което, ако използваме подготвени оператори, би било начин да напишете този SQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. С Laravel Migration, Как да промените типа данни на колона и да актуализирате съществуващите й данни, за да отговарят на новия тип данни, без да използвате необработени SQL заявки?

  2. Как да промените MySQL/MariaDB порт по подразбиране в Linux

  3. SQL заявка за избор с помощта на функции за присъединяване, групиране по и агрегатиране

  4. Пребройте броя на редовете в golang

  5. Как да получите следващия идентификатор за автоматично увеличение в mysql