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

KODEAK

Полезный
Регистрация
11 Апр 2009
Сообщения
172
Реакции
16
есть запрос
PHP:
$User = mysql_query('SELECT user_avatar, username, user_id, group_id
								FROM '.$table_prefix.'users 
							WHERE group_id = 5 ');
как сделать выбор из нескольких group_id что бы было допустим 5 и 4
 
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');
 
вариантов предостаточно - начиная от элементарного цикла (т.е. по очереди перебираем все нужные group_id) и заканчивая уточнением условия WHERE

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

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

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

Как раз правильно 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 строчек по вышеукзанной причине.
 
Кроме того, конструкция WHERE group_id in (4,5) отрабатывает медленнее конструкции WHERE group_id = 4 or group_id = 5. Первая конструкция оправдывает себя только при использовании вложенных запросов.
 
Кроме того, конструкция WHERE group_id in (4,5) отрабатывает медленнее конструкции WHERE group_id = 4 or group_id = 5. Первая конструкция оправдывает себя только при использовании вложенных запросов.

для написания таких заявлений рекомендую первоначально ознакомиться с понятиями explain plan, селективность и различие этих двух конкретных вещей:)
 
для написания таких заявлений рекомендую первоначально ознакомиться с понятиями explain plan, селективность и различие этих двух конкретных вещей:)
раз речь идет об mysql, а не об оракуле, то не с понятием explain plan, а с оператором EXPLAIN [гугл: EXPLAIN SELECT]

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

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

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

вот именно, что и то и другое скорее всего перейдет в мускульный аналог in-list iterator.
 
Назад
Сверху