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 :: Объединение трех запросов для LIMIT

 PHP.SU

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


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

> Без описания
Silver Soft
Отправлено: 14 Ноября, 2013 - 10:03:17
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2013  


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




Доброго времени суток!

Возник вопрос:

есть три запроса (для примера):
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT * FROM b_user WHERE NAME like '$name%'";
  2. $query = "SELECT * FROM b_user WHERE LAST_NAME like '$name%'";
  3. $query = "SELECT * FROM b_user WHERE concat(NAME,' ',LAST_NAME) like '%$name%'";
  4.  

понятно, что каждый из них возвращает разный результат, вопрос в том как можно их объединить (например join), чтобы потом можно было применить LIMIT $page, $limit ?

не хотелось бы все результаты собирать в массив и там уже выдерать нужный диапазон...
да и кеширование результата во временную таблицу тоже не подходит...

вопрос, есть ли решение данное задачи или я уже все возможные варианты отмел? )))

Заранее благодарен!!
 
 Top
imya
Отправлено: 14 Ноября, 2013 - 10:35:37
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




Используйте UNION


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Silver Soft
Отправлено: 14 Ноября, 2013 - 10:55:24
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2013  


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




эм.. и как потом ко всем union применить LIMIT? насколько я знаю, то там прокатит только такое:
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT * FROM b_user WHERE NAME like '$name%' LIMIT 0, 10 UNION
  2. SELECT * FROM b_user WHERE LAST_NAME like '$name%' LIMIT 0, 10 UNION
  3. SELECT * FROM b_user WHERE concat(NAME,' ',LAST_NAME) like '%$name%' LIMIT 0, 10";

а как общий поставить? или я чего-то не догоняю)
 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2013 - 11:19:16
Post Id



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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM (
  2. ... UNION ALL ..
  3. ) LIMIT 10

В общем случае. В вашем - вы же из одной таблицы читаете, where только различается! Объедините все 3 селекта в один.


-----
PostgreSQL DBA
 
 Top
Silver Soft
Отправлено: 14 Ноября, 2013 - 12:52:31
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2013  


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




Мелкий, спасибо)

Все получилось, тему можно закрывать)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB