Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.35.60] |
|
Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Добрый день! Можете помочь сделать запрос на выборку двух значений в одном поле MySQL.
Есть таблица | Id | meta_key | meta_value | Как сделать чтобы в meta_key найти два ключа со значениями из meta_value, Key1 = 2 AND Key2 = 3 Что-то вроде этого, только этот запрос не чего не ищет: SELECT Id FROM Table1 WHERE (meta_key = 'Key1' AND meta_value = 2) AND (meta_key = 'Key2' AND meta_value = 3) |
Сообщ.
#2
,
|
|
|
SELECT Id FROM Table1 WHERE (meta_key = 'Key1' AND meta_value = 2) OR (meta_key = 'Key2' AND meta_value = 3) Иначе выходит что meta_key должен одновременно быть равным двум значениям, что в принципе быть не может. |
Сообщ.
#3
,
|
|
|
А как тогда решить такую задачу можно? Мне нужно по двум полям с определенными значениями. Может как-то группировать можно?
|
Сообщ.
#4
,
|
|
|
Xacatel
Слышь, мужик... ты успокойся, выпей валерьяночки... а потом подумай - что именно тебе нужно-то? Ты чё спросил? давай процитирую: Цитата Xacatel @ Как сделать чтобы в meta_key найти два ключа со значениями из meta_value, Key1 = 2 AND Key2 = 3 Запрос DIS абсолютно точно и абсолютно однозначно выполняет ИМЕННО ЭТУ задачу. Так какого рожна ты недоволен? ах, ты чего-то другого хотел, только ещё не понимаешь, чего именно? или понимаешь, только сказать не можешь? ну так эта... вальерьяночку допей и подумай, как сказать именно то, что тебе надо, и чтобы при этом тебя правильно поняли... PS. Подозреваю, что тебе нужно что-то вроде SELECT Id FROM Table1 WHERE (meta_key = 'Key1' AND meta_value = 2) OR (meta_key = 'Key2' AND meta_value = 3) GROUP BY Id HAVING COUNT(DISTINCT meta_key) = 2 Но слишком много краевых вариантов, способных до неузнаваемости изменить запрос, чтоды давать правильные данные... в общем, думай... |
Сообщ.
#5
,
|
|
|
Действительно работает! Спасибо! Вчера мозг вообще был расплавлен.
|
Сообщ.
#6
,
|
|||||||||||||
|
Цитата Xacatel @ Действительно работает! Спасибо! Не-е-е. Вот тебе вопрос. В таблице есть записи с:
|
Сообщ.
#7
,
|
|
|
Цитата Должен ли быть выбран ID = 1? Да Id нужно выбирать. Вернее результат возвращает список Id |
Сообщ.
#8
,
|
|
|
В таком случае мой запрос подойдёт.
Кстати, а СУБД какая? |
Сообщ.
#9
,
|
|
|
MySQL, я в первом посте указывал.
|
Сообщ.
#10
,
|
|
|
Пардон, проглядел.
Тогда рекомендую трансформировать условие в запросе к виду WHERE (meta_key,meta_value) IN (('Key1',2),('Key2',3)) Во-первых, условие становится более "видимым" именно в комплексе, во-вторых, сразу видно, что для ускорения обработки предпочтительно наличие индекса по (meta_key,meta_value). |
Сообщ.
#11
,
|
|
|
Спасибо, Akina
|