Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Использование LIMIT - help! (Yury V. Zaytsev) 18/07/2003 - 23:09:53
      Re: Использование LIMIT - help! (walrus) 18/07/2003 - 23:36:03
      Re: Использование LIMIT - help! (Валентин) 19/07/2003 - 09:28:18
      Re: Использование LIMIT - help! (walrus) 19/07/2003 - 10:52:40
      Re: Использование LIMIT - help! (Валентин) 19/07/2003 - 13:07:23
      Re: Использование LIMIT - help! (Yury V. Zaytsev) 19/07/2003 - 16:20:30
      Re: Использование LIMIT - help! (walrus) 19/07/2003 - 23:51:24
      Re: Использование LIMIT - help! (Yury V. Zaytsev) 21/07/2003 - 20:17:57
      Re: P.S. (Yury V. Zaytsev) 21/07/2003 - 20:20:47
      Re: Использование LIMIT - help! (Валентин) 22/07/2003 - 18:03:42
      Re: Использование LIMIT - help! (Yury V. Zaytsev) 23/07/2003 - 15:50:15

> Original message text:
> From: Yury V. Zaytsev - 18/07/2003 - 23:09:53
> Subject:Использование LIMIT - help!
> -----------------
> Здравствуйте, all.
>
> Возникла следующая проблема - дело в том, что требуется посчитать, сколько в таблице осталось строк, удволетворяющих определенному условию, начиная с номера определенной строки, причем строки сортируются по числовому индексу (auto_increment).
>
> В чем проблема? Я, к сожалению, так и не понял, как надо воспользоваться LIMIT'ом, чтобы не указывать верхнюю границу. В принципе есть одно решение - написать LIMIT #,-1 (не обязательно -1, а просто отрицательное число), т.к. mySQL обрабатывает отрицательные числа в LIMIT'е как большие положительные, но разаботчики заверяют, что это будет исправлено в будущем и отрицательность будет иметь значение направления выделения, e.g. LIMIT 10,-5 будет выберать 5 строк, начиная с 11-ой. Ну и вообще это какое-то топорное решение. А хочется нормальное.
>
> Вот пример запроса:
>
> SELECT COUNT(id) FROM table ORDER BY number ASC WHERE ... LIMIT 5,...
>
> Так вот как из этого сделать желаемое?
>
> Спасибо,
> Юрий.
>


From: Валентин - 22/07/2003 - 18:03:42
Subject:Использование LIMIT - help!
-----------------
Мне кажется, что неправильно сформулирована задача. Странно, зачем считать, сколько записей в таблице, больше id неизвестно какого ???. Весьма странная задача.
Скорее всего есть конкретная задача, типа подсчитать количество строк которые попали в таблицу после определенной временной точки.
Если так, то ключевое auto_increment поле лучше не трогать для ориентира. Да и не красиво делать выборки по id, когда не знаешь что ищешь.
Для временной точки используйте поле типа timestamp not null и при попадании в базу данных ставьте now(). При изменении строки мускул автоматически поставит туда датувремя изменения. Тогда выборка принимает смысл и запрос значительно проще написать.
Насчет блокировки.
LOCK TABLES table READ
SELECT @temp := id FROM table ORDER BY id LIMIT #,1
SELECT COUNT(id) FROM table WHERE id >= @temp
UNLOCK TABLES
Так как первый запрос возврашает какой-то id, то если не блокировать таблицы и будут добавлены или удалены записи... даже если удалят запись, которую вернул первый запрос - НИЧЕГО СТРАШНОГО НЕ ПРОИЗОЙДЕТ. второй запрос возвратит реальное положение вещей на момент его выполнения. Для innodb: вообще изоляция транзакций позволит в одной транзакции ничего не блокировать, потому что если были изменения таблицы, то они произошли после начала транзакции. Второй запрос происходя в этой же транзакции будет считывать состояние на момент начала транзакции перед первым запросом.
По-моему, блокировка нужна, если использовать результат первого запроса для добавления или изменения таблицы во втором.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
9725



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |