Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: сократить условие WHERE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: а можно ли как-то так =)
ZeiZ
Отправлено: 14 Июля, 2010 - 14:19:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Доброе время суток.

А есть ли какой-нибудь сокращенный способ записи условия?

Например не так
CODE (SQL):
скопировать код в буфер обмена
  1. ... WHERE id = 1 OR id = 3 OR id = 10 OR id= ....


А что-то типа
CODE (SQL):
скопировать код в буфер обмена
  1. ... WHERE id = (1,3,10,...) ...
 
 Top
qbik
Отправлено: 14 Июля, 2010 - 14:24:11
Post Id


Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




http://www[dot]ageent[dot]ru/sql-in[dot]html

WHERE `id` IN (1,3,...)

(Отредактировано автором: 14 Июля, 2010 - 14:25:19)

 
 Top
ZeiZ
Отправлено: 14 Июля, 2010 - 15:20:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




спасибо!
 
 Top
JustUserR
Отправлено: 14 Июля, 2010 - 22:49:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
А есть ли какой-нибудь сокращенный способ записи условия?
Конечно если у вас имеется поиск по индексному или ключевому значению - то его следует вынести в самое начало SQL-запроса с целью его ускорения по схеме работы условного оператора короткого замыкания Что касается оператора IN то она также позволяет организовывать вложенные SQL-запросы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ZeiZ
Отправлено: 15 Июля, 2010 - 13:15:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Ок! с целью оптимизации скрипта вместо конструкции WHERE ... ORDER BY RAND() LIMIT 6;
применяю 2 запроса:
1) поиск всех ид по условию, перемешиваю их и формирую например:
$in = 12,87,24,65,230,8
2) запрашиваю WHERE id IN ($in);

Скорость выполнения возрастает почти в 7(!) раз.

Единственное что, мускул сортирует результат по ид по порядку, а мне надо чтобы он выводил как я указываю в $in т.е. в разнобой. Есть ли такой способ?
 
 Top
JustUserR
Отправлено: 16 Июля, 2010 - 01:44:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
Единственное что, мускул сортирует результат по ид по порядку, а мне надо чтобы он выводил как я указываю в $in т.е. в разнобой. Есть ли такой способ?
Для реализации сортировки по заранее заданной последовательности можно использовать левое внешее соединение со специальным условием - сначала создается таблица-представление в которую в нужном порядке записываются данные по которым требуется произвести сортировку - далее при создании левого соединеня с такой таблицей порядок следования записей в ней сохранится - и нужно будет только добавить JOIN-условие которое будет отвечать за вывод реальных строк данных


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ZeiZ
Отправлено: 16 Июля, 2010 - 03:44:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




JustUserR
вот бы ещё примерчик...

JustUserR
Спасибо, за правку сабжа

А реально ли это тогда это оптимизирует запрос (UP!) ???
или не закорачиваться и писать запросы через rand() ???
(Добавление)
JustUserR пишет:
Для реализации сортировки по заранее заданной последовательности можно использовать левое внешее соединение со специальным условием - сначала создается таблица-представление в которую в нужном порядке записываются данные по которым требуется произвести сортировку - далее при создании левого соединеня с такой таблицей порядок следования записей в ней сохранится - и нужно будет только добавить JOIN-условие которое будет отвечать за вывод реальных строк данных


Т.е. к таблице создать присоску (ещё одну таблицу) где ид будут последовательны (без выпадов) и по ней сортировать (рандомайзить)????
Я правильно понял?
 
 Top
JustUserR
Отправлено: 16 Июля, 2010 - 15:49:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
JustUserR Спасибо, за правку сабжа
А реально ли это тогда это оптимизирует запрос (UP!) ???
или не закорачиваться и писать запросы через rand() ???
Пожалуйста! Оптимизация SQL-запроса происходит в том случае когда среднее время выполнения поиска по соответствующему значению снижается - и если это условие в запросе построено по принципу короткого замыкания или предварительной выброки минимального числа данных для поиска - то оно дейтсвительно будет выполняться быстрее если конечно SQL-интерпретатор не буде проводить оптимизацию самостоятельнл
ZeiZ пишет:
Т.е. к таблице создать присоску (ещё одну таблицу) где ид будут последовательны (без выпадов) и по ней сортировать (рандомайзить)????
Я правильно понял?
Да действительно эта так и в принципе таблица может быть виртуальной то есть результатом выполнения randomize-операции по списку ключевых идентификаторов - и если эта виртуальная таблица используется для внешнего левого соединения то порядок следования записей будут определяться именно по ней - как само внешнее соединение конечно же нужно для получения реальных данных запроса

(Отредактировано автором: 16 Июля, 2010 - 15:55:17)



-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB