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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Сортировка с LIMIT в обратном порядке.
 
 автор: Dante   (03.03.2011 в 23:53)   письмо автору
 
 

Здравствуйте.
Из ряда записей с id, зная некое id_n надо получить от id_n до макс. id, то бишь до конца таблицы, но в обратном порядке, т.е. из ряда:

1
2
3
4
5
6

и имея id_n = 4 надо получить записи в след. порядке: 6,5.
Хочеться в один запрос.

p.s. В литературе написано: "Для того, чтобы выбрать все строки с определенного смещения и до конца результата, вы можете использовать значение -1 в качестве второго параметра:SELECT * FROM table LIMIT 5,-1;"
Почему mysql ругается на такой запрос? Версия не та? Стоит 5.1.40-community.

  Ответить  
 
 автор: Лена   (04.03.2011 в 00:12)   письмо автору
 
   для: Dante   (03.03.2011 в 23:53)
 

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants, with these exceptions.

Это из мануала. Оба числа в лимите должны быть неотрицательными числовыми константами.

В вашем случае я бы сделала так.
Первым запросом узнала, сколько в базе записей.
Вторым запросом бы поставила это количество в LIMIT.
И разложила бы все в реверсном порядке уже на уровне php.

  Ответить  
 
 автор: Dante   (04.03.2011 в 08:29)   письмо автору
 
   для: Лена   (04.03.2011 в 00:12)
 

Черт с ним с порядком.. Он на скорость не влияет. Но неужели mySQL не способен одним запросом выбрать записи от id до конца?..

  Ответить  
 
 автор: dirol   (04.03.2011 в 08:53)   письмо автору
 
   для: Dante   (04.03.2011 в 08:29)
 

Для сортировки данных используется выражение ORDER BY `field_name` [ASC | DESC] [, `field_name2` [ASC | DESC]]

Существует 2 направления сортировки данных в SQL-запросе. ASC – по возрастанию и DESC – по убыванию. По-умолчанию данные сортируются по возрастанию.

Пример:
[mysql]mysql> SELECT `id` FROM `table` ORDER BY `id`;
mysql> SELECT `id` FROM `table` ORDER BY `id` ASC;[/mysql]
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+

mysql> SELECT `id` FROM `table` ORDER BY `id` DESC;
+----+
| id |
+----+
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
+----+

  Ответить  
 
 автор: Dante   (04.03.2011 в 09:29)   письмо автору
 
   для: dirol   (04.03.2011 в 08:53)
 

Спасибо за справку. Вопрос в том, каким образом сыграть на ORDER BY и LIMIT в ОДНОМ запросе, чтобы из ряда
1
2
3
4
5

получить зная id_n=3
5,4

или хотя бы как ОДНИМ запросом получить 4,5.

  Ответить  
 
 автор: dirol   (04.03.2011 в 09:40)   письмо автору
 
   для: Dante   (04.03.2011 в 09:29)
 



    $result = mysql_query("SELECT id FROM tags ORDER BY id ASC LIMIT 2,10", $sql2);
  while (list($id) = mysql_fetch_array($result)) {
    echo "$id<br />\n";
  }


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


    $result = mysql_query("SELECT id FROM tags  WHERE id IN (4,5)", $sql2);
  while (list($id) = mysql_fetch_array($result)) {
    echo "$id<br />\n";
  }

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

  Ответить  
 
 автор: Dante   (04.03.2011 в 10:00)   письмо автору
 
   для: dirol   (04.03.2011 в 09:40)
 

Откуда взялось 10? )) Надо до конца таблицы, хоть 0 хоть 100... Не хочеться отдельный запрос делать, чтобы узнать сколько конкретно до конца таблицы. Т.к. очень быстро добавляются записи в таблицу, и быстро выбираются.

  Ответить  
 
 автор: dirol   (04.03.2011 в 11:13)   письмо автору
 
   для: Dante   (04.03.2011 в 10:00)
 

попробуй так

    $result = mysql_query("SELECT id FROM tags WHERE id > 2 ORDER BY id ASC", $sql2);
  while (list($id) = mysql_fetch_array($result)) {
    echo "$id<br />\n";
  }


2 это то что мы знаем и от нее отталкиваемся пропуская первые записи начинаем выборку с 2

  Ответить  
 
 автор: Dante   (04.03.2011 в 11:26)   письмо автору
 
   для: dirol   (04.03.2011 в 11:13)
 

Спасибо. Ну я и баран, что ж меня то так на танцы с LIMIT переклинило, что про WHERE забыл...((

  Ответить  
Rambler's Top100
вверх

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