|
|
|
| Здравствуйте!
такая ситуация
к примеру есть 1000 новостей которые сортируются по дате
есть id конкретной новости
как узнать какой номер по порядку она занимает среди 1000 других новостей
спасибо | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(26.06.2010 в 10:42)
| | в общем случае, определение ранга в упорядоченной последовательности не есть задача реляционной СУБД. И в виде функции MySQL она не реализована.
Запрос к БД в принципе можно построить, но он будет зиждиться на декартовом произведении таблицы на самое себя (1000x1000 строк) и легким в результате не окажется.
Для одной записи, конечно, попроще... но тоже не влет. Принцип тот же. | |
|
|
|
|
|
|
|
для: Trianon
(26.06.2010 в 10:58)
| | так может тогда проще сделать функцию которая делает точечные запросы пока не обнаружит нужный ид?
например
узнаем дату нужной нам новости
SELECT date FROM news WHERE id=$id
узнаем количество записей
SELECT COUNT(*) FROM news
узнаем дату средней записи новостей ($count - это половина от количества новостей)
SELECT date FROM news ORDER BY date DESC LIMIT 1,$count
сравниваем даты и ищем дальше разделив $count на 2
SELECT date FROM news WHERE date<$date ORDER BY date DESC LIMIT 1,$count
и так далее...
главное чтобы в новостях не было одинаковых дат
если новостей 10 а наша вторая то сначала будет запрос на 5 новость, потом на третью и потом на нашу | |
|
|
|
|
|
|
|
для: Trianon
(26.06.2010 в 10:58)
| | кажется придумал
нужно три запроса
первый определяет количество записей
второй получает дату нужной новости
третий считает количество старших новостей
главное чтобы даты не совпадали | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(26.06.2010 в 11:25)
| | соверошенно очевидно, что если/доколе дата - неуникальный ключ, они таки будут совпадать.
Тут, правда, вот какое облегчение есть...
Если не допускать анонсы (новости, помещаемые задним числом) , и последующие правки даты новости,... то автоинкрементный первичный ключ вполне себе тянет на такое поле.
Хучь это и сугубо против расовой теории.
И таки запрос нужен лишь один. | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(26.06.2010 в 10:42)
| | На ум приходят только массивы в php | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(26.06.2010 в 10:42)
| | Одним запросом, если правильно понял вопрос:
$query = "
SELECT `date`, ( SELECT COUNT(*) FROM `news` WHERE `date` < (SELECT `date` FROM `news` WHERE `id` = ' ".intval($id)." ' LIMIT 1 ) ) AS `num_date` FROM `news` WHERE `id` = ' ".intval($id)." '
"; | |
|
|
|