Выбрать из таблицы значение?

298
07 января 2018, 04:29

Есть таблица с полями product_id, key, value Как выбрать из таблицы значения product_id где: 1) key = emkost AND value = 510
2) key = tok AND value = 54

То есть, получить product_id товара, который подходит и по первому и по второму условия. Уникальный значений нет.

Собственно запрос вида

SELECT * FROM `hukelUUkhydjem_ms2_product_options` 
WHERE `key` = 'emkost' AND value = 54 OR
`key` = 'tok' AND value = 510
GROUP BY product_id

Выдает мне 2 параметра, а мне нужно 1.

Пример таблицы

product_id key    value
515        emkost 510
515        tok    54
516        emkost 510
516        tok    56

В данном примере согласно запросу выше мы должны получить значение 515, так как оно подходит по двум параметрам. А 516 подходит только по одному.

Answer 1

Если Вам нужно выполнение любого из двух условий, то нужно всего лишь правильно расставить скобки

SELECT DISTINCT
  product_id
FROM
  `product_options` 
WHERE
  (`key` = 'emkost' AND value = 510) OR
  (`key` = 'tok' AND value = 54)

Если же Вам нужно найти только те product_id, для которых выполняется оба условия, то немного сложнее

SELECT
  prod1.product_id
FROM
  `product_options` prod1
  LEFT JOIN `product_options` prod2 ON (
    prod1.product_id = prod2.product_id
  )
WHERE
  prod1.`key` = 'emkost' AND prod1.value = 510 AND
  prod2.`key` = 'tok' AND prod2.value = 54

Ну и тест http://sqlfiddle.com/#!9/7f274c/4

Answer 2

Возможно как-то так:

SELECT `product_id`
FROM (SELECT  `product_id`, COUNT(1) AS `cnt`
      FROM    `table`
      WHERE   (`key`, `value`) IN (('emkost', 510), ('tok', 54)) 
      GROUP BY `product_id`
) tmp
WHERE tmp.cnt > 1
Answer 3
SELECT * FROM `hukelUUkhydjem_ms2_product_options` 
WHERE (`key` = 'emkost' AND value = 54) OR
(`key` = 'tok' AND value = 510)
GROUP BY product_id

можно ещё поставить LIMIT 1, если строго 1 ответ нужен, а так скобки в данном запросе все решают

READ ALSO
создание БД в MySQL Спорт

создание БД в MySQL Спорт

можете помочь воссоздать данную БДна создании внешнего ключа произошла ошибка

291
C# + FPS в 2д играх [требует правки]

C# + FPS в 2д играх [требует правки]

Собрался писать игру - на всеми любимом c#, но возникли кое какие трудности, с выбором средств реализацииИгра 2д

265
Сборщик мусора и HandleCollector

Сборщик мусора и HandleCollector

Почитал про HandleCollector, который можно использовать в сценариях работы с неуправляемыми ресурсами

292
Как сделать pop-up в Unity?

Как сделать pop-up в Unity?

В игровой сцене есть менюшка с клавишами (GameObject → UI → Button)Я хочу, что бы при нажатии на клавишу "About" появлялся pop-up (всплывающее окно) с информацией...

284