Длинный запрос SQL

12
Spell
На сайте с 14.07.2006
Offline
72
1673

Здравствуйте.

Насколько корректно использовать подобный запрос?:


SELECT name, foto, news FROM users WHERE group <> 1 AND newsnum <> 0 AND ( name = '123' OR name = 'MmM' OR name = 'Gami' OR name = 'Umiro' OR name = 'Zma' OR name = 'Madr' OR name = 'Moys' OR name = 'Аnom' OR name = 'Mina' OR name = 'Admin' OR name = 'Manda' OR [..еще сотня name = 'nick'] )
Joker-jar
На сайте с 26.08.2010
Offline
171
#1

WHERE name IN ('123', 'MmM', 'Gami', ....)

так получше, но лишь по части синтаксиса. Нужно смотреть структуру БД, возможно, там можно привести к более нормальной форме (дополнительная группировка пользователей и т.п.)

Spell
На сайте с 14.07.2006
Offline
72
#2

Спасибо. Можно, наверное - соединив два запроса в один ( по WHERE table1.name = table2.name ). Читаю многостраничное описание команд и пытаюсь понять как, ведь запрос тогда очень сложный будет, а я не дружу с SQl (а он со мной ) ).

Joker-jar
На сайте с 26.08.2010
Offline
171
#3

Приведите здесь структуры таблиц и поставленную задачу, вам помогут

kil
На сайте с 03.04.2006
Offline
84
kil
#4

Только не забудьте про индексы.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5

ТС, не переживайте, всё будет ок. Главное, как сказали выше, удостоверитесь, что индексы в столбце name проставлены. Остальное БД сделает за вас :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Dreammaker
На сайте с 20.04.2006
Offline
569
#6
LEOnidUKG:
что индексы в столбце name проставлены

здесь нужен не индекс по name, а составной индекс по всем трём столбцам. Но на всякий случай EXPLAIN лучше сделать для гарантии.

savage
На сайте с 10.01.2007
Offline
224
#7

Уже есть WHERE group <> 1 , почему бы эти 100 пользователей не объединить еще в какую-нить группу и уже делать WHERE group=n ну или добавить еще таблицу с правами пользователей.

Купить / продать сайт ( https://www.telderi.ru/?pid=ca1f70 ) | Недорогой и надежный хостинг ( https://www.get-host.ru )
I
На сайте с 23.12.2010
Offline
25
#8
Dreammaker:
здесь нужен не индекс по name, а составной индекс по всем трём столбцам. Но на всякий случай EXPLAIN лучше сделать для гарантии.

сомневаюсь я что такой индекс тут поможет чем-то.

если бы было WHERE group = 1 AND newsnum = 0 - тогда да.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#9
iopiop:
сомневаюсь я что такой индекс тут поможет чем-то.
если бы было WHERE group = 1 AND newsnum = 0 - тогда да.

лучше жувать иногда :)

Почитайте, что такое индексы. От запроса это не зависит.

---------- Добавлено в 23:57 ---------- Предыдущее сообщение было в 23:49 ----------

И кстати, ТС попробуйте пойти от обратного и искать ОДИН !=nick может быть быстрее будет :)

Dreammaker
На сайте с 20.04.2006
Offline
569
#10
iopiop:
тут поможет чем-то.

Если мне не изменяет память, то конструкция IN или её аналог OR ... OR

... OR .... проходит аналогично отдельным запросам, а значит и составной индекс будет задействоваться. Но я сделал оговорку, что нужно проверить EXPLAIN. Ибо "чуйка" подсказывает, что должно работать, но всё же проверка не будет лишней, ибо я уже какое-то время больше "по руководящей линии", чем собственно програмлю, мог уже что-то и забыть.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий