Выбор из нескольких строк

Тема в разделе "Базы данных", создана пользователем KODEAK, 15 июн 2011.

Модераторы: latteo
  1. KODEAK

    KODEAK

    Регистр.:
    11 апр 2009
    Сообщения:
    161
    Симпатии:
    15
    есть запрос
    PHP:
    $User mysql_query('SELECT user_avatar, username, user_id, group_id
                                    FROM '
    .$table_prefix.'users 
                                WHERE group_id = 5 '
    );
    как сделать выбор из нескольких group_id что бы было допустим 5 и 4
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    PHP:
    $User mysql_query('SELECT user_avatar, username, user_id, group_id 
                                    FROM '
    .$table_prefix.'users  
                                WHERE group_id in (4,5) '
    ); 
    или
    PHP:
    $User mysql_query('SELECT user_avatar, username, user_id, group_id 
                                    FROM '
    .$table_prefix.'users  
                                WHERE group_id = 5 OR group_id = 4'
    ); 
     
    Ranger_Hunter и KODEAK нравится это.
  3. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    вариантов предостаточно - начиная от элементарного цикла (т.е. по очереди перебираем все нужные group_id) и заканчивая уточнением условия WHERE

    например
    PHP:
    WHERE group_id 5
    выдаст все строки у которых group_id меньше 5, а
    PHP:
    WHERE group_id AND group_id 5
    , т.е. конкретно ваш пример

    мне непонятно другое - различным базам данных посвящен целый раздел нулледа - почему вы не пожелали задать свой вопрос в тематическом разделе? мол, пускай модераторы сами разбираются куда переместить?

    P.S.
    пока набирал ответ, chang опередил, написав практически то же самое ))
    единственный ньюанс - ТС интересовался "4 и 5", а у вас получилось "4 или 5", т.е. все-таки не OR а AND
     
    KODEAK нравится это.
  4. Rheola

    Rheola Создатель

    Регистр.:
    12 фев 2009
    Сообщения:
    19
    Симпатии:
    5
    Как раз правильно OR.

    Одно поле не может одновременно равняться 4 и 5.
    Как можно выбрать пользователей, у которых номер группы равен 4 и 5 одновременно?

    запись 'Where user_id=5 and group_id=4' - корректна. Разные поля.
    или 'WHERE group_id = 4 or group_id = 5 ' - номер группы равен 4 или 5.

    А 'WHERE group_id = 4 AND group_id = 5 ' - выдаст 0 строчек по вышеукзанной причине.
     
    KODEAK нравится это.
  5. iShurin

    iShurin Писатель

    Регистр.:
    4 мар 2010
    Сообщения:
    8
    Симпатии:
    7
    Кроме того, конструкция WHERE group_id in (4,5) отрабатывает медленнее конструкции WHERE group_id = 4 or group_id = 5. Первая конструкция оправдывает себя только при использовании вложенных запросов.
     
  6. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    для написания таких заявлений рекомендую первоначально ознакомиться с понятиями explain plan, селективность и различие этих двух конкретных вещей:)
     
  7. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    раз речь идет об mysql, а не об оракуле, то не с понятием explain plan, а с оператором EXPLAIN [гугл: EXPLAIN SELECT]

    а вот насчет селективности я не понял. каким боком она имеет отношение к утверждению iShurin ?

    ps по моему (где-то такая инфа на глаза попадалась) для mysql вообще никакой разницы нет между
    where x=1 or x=2
    и
    where x in (1,2)
    для движка mysql эти запросы эквивалентны и вычисляются по одному алгоритму.
     
  8. coguar

    coguar Постоялец

    Регистр.:
    4 авг 2007
    Сообщения:
    61
    Симпатии:
    11
    Полезный топик, все таки цикл - это будет уже не то, особенно когда надо оптимизировать проекты и когда имеет смысл создать и заюзать 1 запрос вместо 10-20.

    Жаль тут на форуме закладок нету чтоб тему записать.
     
  9. anz

    anz Level XXL

    Регистр.:
    17 окт 2006
    Сообщения:
    935
    Симпатии:
    304
    зачем закладки... подписки на тему же есть :)
     
  10. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    вот именно, что и то и другое скорее всего перейдет в мускульный аналог in-list iterator.