Общие > Базы данных

Как определить позицию записи в MySQL?

<< < (2/3) > >>

qwer3d:
Физически не надо. Это и не правильно и при больших объемах данных все будет тормозить.


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

ravshaniy:
добавьте поле `_orderby` и сортируйте по нему
SELECT * FROM таблица ORDER BY `_orderby` DESC, `time`DESC

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

qwer3d:
Есть такой вариант:

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:
Очень любопытный синтаксис, честно говоря впервый раз его встретил в 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:
Интересно что с помощью оператора *:=* можно в один запрос решить задачу, которую часто задают на собеседовании.
Задача:
Как сделать выборку из таблицы{id, goods, quantity }. так чтобы в каждой последующей строке в поле quantity суммировались предыдущии значения.

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

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

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 
Перейти к полной версии