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

Форум MySQL

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

 

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

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

тема: запрос на определения места записи в сортировке
 
 автор: Дмитрий Смаль   (26.06.2010 в 10:42)   письмо автору
 
 

Здравствуйте!

такая ситуация
к примеру есть 1000 новостей которые сортируются по дате
есть id конкретной новости

как узнать какой номер по порядку она занимает среди 1000 других новостей

спасибо

  Ответить  
 
 автор: Trianon   (26.06.2010 в 10:58)   письмо автору
 
   для: Дмитрий Смаль   (26.06.2010 в 10:42)
 

в общем случае, определение ранга в упорядоченной последовательности не есть задача реляционной СУБД. И в виде функции MySQL она не реализована.
Запрос к БД в принципе можно построить, но он будет зиждиться на декартовом произведении таблицы на самое себя (1000x1000 строк) и легким в результате не окажется.

Для одной записи, конечно, попроще... но тоже не влет. Принцип тот же.

  Ответить  
 
 автор: Дмитрий Смаль   (26.06.2010 в 11:12)   письмо автору
 
   для: 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 новость, потом на третью и потом на нашу

  Ответить  
 
 автор: Дмитрий Смаль   (26.06.2010 в 11:25)   письмо автору
 
   для: Trianon   (26.06.2010 в 10:58)
 

кажется придумал
нужно три запроса

первый определяет количество записей

второй получает дату нужной новости

третий считает количество старших новостей

главное чтобы даты не совпадали

  Ответить  
 
 автор: Trianon   (26.06.2010 в 13:27)   письмо автору
 
   для: Дмитрий Смаль   (26.06.2010 в 11:25)
 

соверошенно очевидно, что если/доколе дата - неуникальный ключ, они таки будут совпадать.

Тут, правда, вот какое облегчение есть...
Если не допускать анонсы (новости, помещаемые задним числом) , и последующие правки даты новости,... то автоинкрементный первичный ключ вполне себе тянет на такое поле.

Хучь это и сугубо против расовой теории.

И таки запрос нужен лишь один.

  Ответить  
 
 автор: Neverhood   (26.06.2010 в 11:01)   письмо автору
 
   для: Дмитрий Смаль   (26.06.2010 в 10:42)
 

На ум приходят только массивы в php

  Ответить  
 
 автор: hallboy3   (26.06.2010 в 14:50)   письмо автору
 
   для: Дмитрий Смаль   (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)." '
";

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

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