Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Хитрый sql запрос или как все уложить в один запрос

Сообщения:  [1-10]   [11-17] 

 
 автор: elenaki   (05.11.2004 в 22:08)   письмо автору
 
   для: cheops   (05.11.2004 в 21:14)
 

хорошо, я сделаю дополнительный запрос, узнаю, сколько у меня записей в таблице и возьму 4 с конца (поначалу там может быть и меньше 4-х записей). спасибочки. :)

   
 
 автор: cheops   (05.11.2004 в 21:14)   письмо автору
 
   для: glsv (Дизайнер)   (05.11.2004 в 16:09)
 

Ну в любом случае, MySQL не сканирует таблицы, а хранит число записей в таблице, поэтому дополнительный запрос будет выполняться очень быстро.

   
 
 автор: glsv (Дизайнер)   (05.11.2004 в 16:09)   письмо автору
 
   для: elenaki   (05.11.2004 в 15:48)
 

Да... вложенная таким образом агрегатная функция может и не работать.

   
 
 автор: elenaki   (05.11.2004 в 15:48)   письмо автору
 
   для: cheops   (05.11.2004 в 15:36)
 

SELECT * FROM banner_main WHERE pos = 'top' ORDER BY banner_ord DESC LIMIT COUNT(*)-4,3 failed!
You have an error in your SQL syntax near 'COUNT(*)-4,3' at line 1

   
 
 автор: cheops   (05.11.2004 в 15:36)   письмо автору
 
   для: elenaki   (05.11.2004 в 15:30)
 

Функция count() должна в любой части запроса работать
$query = "SELECT * FROM banner_main WHERE pos = 'top' ORDER BY banner_ord DESC LIMIT COUNT(*)-4,3";

   
 
 автор: elenaki   (05.11.2004 в 15:30)   письмо автору
 
   для: glsv (Дизайнер)   (05.11.2004 в 15:10)
 

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

   
 
 автор: glsv (Дизайнер)   (05.11.2004 в 15:10)   письмо автору
 
   для: glsv (Дизайнер)   (05.11.2004 в 15:08)
 

Точнее:

LIMIT [количество строк-4], [количество строк]

   
 
 автор: glsv (Дизайнер)   (05.11.2004 в 15:08)   письмо автору
 
   для: cheops   (05.11.2004 в 14:57)
 

Так а id (я так понял) используется для сортировки чтобы вывести 4 последних значения.
О как можно! Придумал.

Ставьте не LIMIT 0,3 , а LIMIT [количество строк], [количество строк -4]
Тогда Ваша сортировка ORDER BY будет работать именно для сортировки. Т.е. ORDER BY banner_ord

   
 
 автор: elenaki   (05.11.2004 в 15:04)   письмо автору
 
   для: cheops   (05.11.2004 в 14:57)
 

по id я сортирую, потому что мне нужно 4 послeдних баннера. т.к. id=autoincrement, то по DESC id мне выберутся 4 последних. если можно как-то по-другому выбирать четыре баннера с наибольшими id, то потом, конечно, можно сортировать по banner_ord....

   
 
 автор: glsv (Дизайнер)   (05.11.2004 в 15:03)   письмо автору
 
   для: elenaki   (05.11.2004 в 13:48)
 

Да, хитрый запрос.
Вам фактически нужно 2 раза сортировать. Первый раз для выборки и второй только для, собственно, сортировки.
Учитывая, что в третьей версии MySQL подзапросов еще нет, то... наверное одним запросом это не сделать. А сортировать уже выборку. Хорошо что она хоть не большая - всего 4 позиции.

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования