Автор Тема: Как определить позицию записи в MySQL?  (Прочитано 14282 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?

Вот таблица:

| id |     time       | text |
--------------------------
| 1 | 10-10-2008 | revte|
| 9 | 24-06-2007 | tvrtv |
| 4 | 05-02-2005 | rvt2  |
| 3 | 17-04-2008 | ybt   |



Мне нужно определить на какой позиции будет находиться запись с id 9 если отсортировать данные по убыванию колонку time

Должно получиться на третьей позиции находиться.

Пожалуйста помогите. ни как  не получаеться.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #1 : 21 Февраля 2008, 16:58:24 »
SELECT COUNT(*)  as row_number FROM таблица WHERE `time` < (
 SELECT `time` FROM таблица WHERE id = 9
)

штото типо так?
убили кенни, сволочи

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #2 : 21 Февраля 2008, 17:07:42 »
ravshaniy  ДА! Спасибо!

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #3 : 21 Февраля 2008, 18:32:48 »
Не правильно. Више пример просто считает кол. записей.

в итоге если дата меняеться - то получаеться, что позиция не меняется.

в том-то все и дело, что если изменить время, то поле с id 9 останеться на том же месте. а должно измениться место.

Время сортируеться по убыванию.
Если id 9 изменить время например 2009 год, то id 9 должно быть на первом месте. А получаеться что,  выше приведенный пример оставляет ее на том же месте.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #4 : 22 Февраля 2008, 11:30:59 »
Цитировать
qwer3d:
в том-то все и дело, что если изменить время, то поле с id 9 останеться на том же месте. а должно измениться место.


вы хотите сделать так чтобы в таблице физически записи перемещались? зачем?

Цитировать
qwer3d:
Время сортируеться по убыванию.

SELECT * FROM таблица ORDER BY `time`DESC

что Вам нужно то и при чем тут id = 9. Извините, я не понимаю смысла Вашей задачи.
убили кенни, сволочи

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #5 : 22 Февраля 2008, 20:10:11 »
Физически не надо. Это и не правильно и при больших объемах данных все будет тормозить.


Я пишу рейтинг. Моя задача похожа как на сайте mamba.ru где в анкетах написано на каком месте она находиться.
Когда человек ее поднимает, то меняеться и место, также если он ее не поднимает, то она опускаеться.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #6 : 23 Февраля 2008, 14:25:18 »
добавьте поле `_orderby` и сортируйте по нему
SELECT * FROM таблица ORDER BY `_orderby` DESC, `time`DESC

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

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #7 : 24 Февраля 2008, 18:39:48 »
Есть такой вариант:

SET @recNo:=0;
SELECT n FROM (SELECT @recNo := @recNo+1 n, id FROM table ORDER BY time DESC) s WHERE id=22;


этот вариант работает так как надо, но я думаю что будет с нагрузкой в 10.000 изеров при обновлении в 30 сек. страницу

или лучше ваш вариант?

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #8 : 26 Февраля 2008, 11:27:18 »
Очень любопытный синтаксис, честно говоря впервый раз его встретил в Mysql, и найти документацию по оператору *:=* так же не могу. очень позновательно спасибо.
да Ваш запрос было бы неплохо оптимизировать. немножко. у Вас внутренний подзапрос - есть выборка всех данных. всех строк из таблицы. это есть несколько не хорошо, а в связи с этим этот запрос будет работать быстрее

 SELECT COUNT(*)  as row_number FROM таблица WHERE `time` < (
 SELECT `time` FROM таблица WHERE id = 9
)

по логике они делают одно и тоже, но похоже я ошибся в знаке. получается что нужно:

 SELECT COUNT(*)  as row_number FROM таблица WHERE `time` > (
 SELECT `time` FROM таблица WHERE id = 9
)
убили кенни, сволочи

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #9 : 26 Февраля 2008, 11:38:34 »
Интересно что с помощью оператора *:=* можно в один запрос решить задачу, которую часто задают на собеседовании.
Задача:
Как сделать выборку из таблицы{id, goods, quantity }. так чтобы в каждой последующей строке в поле quantity суммировались предыдущии значения.

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

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как определить позицию записи в MySQL?
« Ответ #10 : 27 Февраля 2008, 15:07:43 »
*:=* это действительно как маленькое чудо получаеться.
сам случайно наткнулся когда искал по иностранным форумам.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28