Общие > Базы данных
Как определить позицию записи в MySQL?
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 суммировались предыдущии значения.
а с этим оператором получается очень даже просто
Навигация
Перейти к полной версии