MySQL выбрать проблему - PullRequest
       2

MySQL выбрать проблему

1 голос
/ 17 марта 2011

У меня есть, как следовать таблице.

И я хочу выбрать соответствие этому -> "Tip-1 = 225 и Tip-2 = 65 и Tip3 = 16" продукт.

Тамявляются 1 продукты, которые соответствуют запросу.Идентификатор продукта 2.

Но я не знаю, как это сделать, пожалуйста, помогите мне.

id  product_id  option_id   name    label   value
44  1                   4   Tip-5   Tip 5   Dört Mevsim
42  1                   2   Tip-2   Tip 2   65
48  2                   4   Tip-5   Tip 5   Dört Mevsim
47  2                   3   Tip-3   Tip 3   16
46  2                   2   Tip-2   Tip 2   65
45  2                   1   Tip-1   Tip 1   225
52  3                   4   Tip-5   Tip 5   Dört Mevsim
51  3                   3   Tip-3   Tip 3   16
50  3                   2   Tip-2   Tip 2   75
49  3                   1   Tip-1   Tip 1   215
60  4                   4   Tip-5   Tip 5   Dört Mevsim
58  4                   2   Tip-2   Tip 2   75
64  5                   4   Tip-5   Tip 5   Dört Mevsim
63  5                   3   Tip-3   Tip 3   12
62  5                   2   Tip-2   Tip 2   85
61  5                   1   Tip-1   Tip 1   155
59  4                   3   Tip-3   Tip 3   16
43  1                   3   Tip-3   Tip 3   16
41  1                   1   Tip-1   Tip 1   205
57  4                   1   Tip-1   Tip 1   205
72  6                   4   Tip-5   Tip 5   Dört Mev

Ответы [ 4 ]

3 голосов
/ 17 марта 2011

Попробуйте это:

SELECT product_id
FROM yourtable
WHERE (name, value) IN (('Tip-1', '225'), ('Tip-2', '65'), ('Tip-3', '16'))
GROUP BY product_id
HAVING COUNT(*) = 3

Предполагается, что (product_id, name) является уникальным. Если нет, используйте COUNT(DISTINCT name).

0 голосов
/ 17 марта 2011

Обычная группа с предложениями OR и HAVING должна это сделать

SELECT   product_id
FROM     yourtable
WHERE    (name = 'Tip-1' and value = '225')
   OR    (name = 'Tip-2' and value = '65')
   OR    (name = 'Tip-3' and value = '16')
GROUP BY product_id
HAVING   COUNT(distinct value) = 3
0 голосов
/ 17 марта 2011

Прежде всего, если у вас нет особых потребностей, это ужасный дизайн базы данных.Тем не менее,

SELECT T1.product_id
FROM mytable T1
JOIN mytable T2 ON T1.product_id = T2.product_id
JOIN mytable T3 ON T1.product_id = T3.product_id
WHERE T1.name = 'Tip-1' AND T1.value = '255'
  AND T2.name = 'Tip-2' AND T2.value = '65'
  AND T3.name = 'Tip-3' AND T3.value = '16'
0 голосов
/ 17 марта 2011

Было бы лучше иметь собственную таблицу для подробностей о продукте, но чтобы сделать выбор, попробуйте это

SELECT * FROM table_name WHERE (name = "Tip-1" AND value = 225) AND (name = "Tip-2" AND value = 65) AND (name = "Tip-3" AND value = 16) GROUP BY product_id

Это может работать, но структура таблицы действительно ужасна, вы должны изменить ее, если это возможно ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...