За последние 24 часа нас посетили 18653 программиста и 1599 роботов. Сейчас ищут 995 программистов ...

Получить значение поля,связанного с несколькими значениями

Тема в разделе "MySQL", создана пользователем 2borg, 13 ноя 2013.

  1. 2borg

    2borg Новичок

    С нами с:
    13 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Добрый вечер,уважаемые формучане.
    Прошу помощи в составлении запроса.
    Задача следующая:
    1. Имеется след. таблица:[​IMG]
    2. Нужно составить запрос таким образом, чтобы получить значение поля "property_id",которое соответствует нескольким значениям поля "amenities_id". Т.е. у меня массив со значениями "amenities_id". Например, в массиве у меня "16,11,7,10,17,18", я должен проверить значения поля "amenities_id",и получить соответствующий "property_id". В примере получается "property_id" = 1.
    Короче говоря,надо,чтобы выводился "property_id" для которого заданы точные значения поля "amenities_id".
    IN не подходит, т.к. он выводит "property_id" при любом соответствии.
    Грубо говоря,что-то типа такого (знаю,что не работает):
    SELECT * FROM `**********` WHERE `amenities_id` = 16 AND `amenities_id` = 11 AND `amenities_id` = 17 AND `amenities_id` = 10 AND `amenities_id` = 17 AND `amenities_id` = 18.

    Добавлено спустя 7 минут 38 секунд:
    Натолкните хотя бы на мысль,как отбирать значение первого поля по нескольким значениям второго.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Получить значение поля,связанного с несколькими значения

    вместо AND тут нужен был OR
    но для таких случаев есть механизм WHERE `amenities_id` IN (10, 11, 18, 17)
     
  3. 2borg

    2borg Новичок

    С нами с:
    13 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Re: Получить значение поля,связанного с несколькими значения

    Пробовал.Работает не так,как нужно.Т.е. "property_id" будут выдаваться те,у которых любой из "amenities_id" есть в массиве,а мне надо,чтобы выдавался только тот,у которого ВСЕ "amenities_id" есть в массиве. Как бы логика И должна быть,а не ИЛИ.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Получить значение поля,связанного с несколькими значения

    а, ну тогда твой запрос верный.
     
  5. 2borg

    2borg Новичок

    С нами с:
    13 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Re: Получить значение поля,связанного с несколькими значения

    Мой запрос ничего не выводит,т.к. это логично,что он проверят оду запись на одновременное равенство нескольким значениям.
    Пробовал так:
    SELECT `property_id` , COUNT( * ) AS c FROM `*******************`WHERE `amenities_id`IN ( 10, 11, 16, 17, 18 ) GROUP BY 1 HAVING c =5
    Но выводятся совсем другие "property_id" (310,377,...),а мне нужно в этом случае "property_id" 1
     
  6. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Re: Получить значение поля,связанного с несколькими значения

    можно же более визуально красивый запрос, тем-же IN
    только добавить в конце HAVING COUNT(DISTINCT amenities_id) = кол-ву элементов в IN

    З.Ы. вот выше почти прав, только из селекта выкини каунт и сделать дистинкт )
     
  7. 2borg

    2borg Новичок

    С нами с:
    13 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Re: Получить значение поля,связанного с несколькими значения

    Спасибо большое.Идею понял.Буду разбираться,а то опыт с MySQL не очень большой и такой запрос вызвал затруднения... :)
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Получить значение поля,связанного с несколькими значения

    я за ANDы
     
  9. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Re: Получить значение поля,связанного с несколькими значения

    поддерживаю, ибо быстрее )