На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Запрос на выборку двух значений в одном поле
    Добрый день! Можете помочь сделать запрос на выборку двух значений в одном поле MySQL.

    Есть таблица | Id | meta_key | meta_value |

    Как сделать чтобы в meta_key найти два ключа со значениями из meta_value,

    Key1 = 2 AND Key2 = 3


    Что-то вроде этого, только этот запрос не чего не ищет:

    ExpandedWrap disabled
      SELECT Id FROM Table1 WHERE (meta_key = 'Key1' AND meta_value = 2) AND (meta_key = 'Key2' AND meta_value = 3)
      ExpandedWrap disabled
        SELECT Id FROM Table1 WHERE (meta_key = 'Key1' AND meta_value = 2) OR (meta_key = 'Key2' AND meta_value = 3)


      Иначе выходит что meta_key должен одновременно быть равным двум значениям, что в принципе быть не может.
        А как тогда решить такую задачу можно? Мне нужно по двум полям с определенными значениями. Может как-то группировать можно?
          Xacatel
          Слышь, мужик... ты успокойся, выпей валерьяночки... а потом подумай - что именно тебе нужно-то?

          Ты чё спросил? давай процитирую:

          Цитата Xacatel @
          Как сделать чтобы в meta_key найти два ключа со значениями из meta_value,

          Key1 = 2 AND Key2 = 3

          Запрос DIS абсолютно точно и абсолютно однозначно выполняет ИМЕННО ЭТУ задачу. Так какого рожна ты недоволен? ах, ты чего-то другого хотел, только ещё не понимаешь, чего именно? или понимаешь, только сказать не можешь? ну так эта... вальерьяночку допей и подумай, как сказать именно то, что тебе надо, и чтобы при этом тебя правильно поняли...

          PS. Подозреваю, что тебе нужно что-то вроде
          ExpandedWrap disabled
            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

          Но слишком много краевых вариантов, способных до неузнаваемости изменить запрос, чтоды давать правильные данные... в общем, думай...
            Действительно работает! Спасибо! Вчера мозг вообще был расплавлен.
              Цитата Xacatel @
              Действительно работает! Спасибо!

              Не-е-е.
              Вот тебе вопрос. В таблице есть записи с:


              Idmeta_keymeta_value
              1 Кеу12
              1 Кеу122
              1 Key23
              Должен ли быть выбран ID = 1?
              Сообщение отредактировано: Akina -
                Цитата
                Должен ли быть выбран ID = 1?


                Да Id нужно выбирать.

                Вернее результат возвращает список Id
                Сообщение отредактировано: Xacatel -
                  В таком случае мой запрос подойдёт.
                  Кстати, а СУБД какая?
                  Сообщение отредактировано: Akina -
                    MySQL, я в первом посте указывал.
                      Пардон, проглядел.
                      Тогда рекомендую трансформировать условие в запросе к виду

                      ExpandedWrap disabled
                        WHERE (meta_key,meta_value) IN (('Key1',2),('Key2',3))


                      Во-первых, условие становится более "видимым" именно в комплексе, во-вторых, сразу видно, что для ускорения обработки предпочтительно наличие индекса по (meta_key,meta_value).
                        Спасибо, Akina
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0295 ]   [ 16 queries used ]   [ Generated: 26.04.24, 06:41 GMT ]