2013-02-26 3 views
-2

Я использую этот запрос mysql, чтобы получить ранг по точкам. Мне нужно получить предыдущий и следующий предметы по рангу.Получить предыдущую и следующую строку из mysql на основе ранга

Например: рейтинг предмета: 99. На странице позиции, я хочу показать 100, 101, 98 и 97 пунктов.

http://erincfirtina.com/apps/urdemo/track.php?tid=10

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

Вот мой MySQL запрос, который получают ранг:

SELECT 
uo.*, 
(SELECT COUNT(*) FROM tracks ui WHERE (ui.point, ui.id) >= (uo.point, uo.id)) AS rank 
FROM tracks uo WHERE id = 10 
+0

Когда вы имеете в виду 100-й ранг, это значит ранг приходит из '(SELECT COUNT (*) FROM дорожек щий WHERE (ui.point, ui.id)> = (uo.point, uo.id)) AS rank'? Нам лучше увидеть структуру таблицы, чтобы уточнить – fedorqui

+0

. Кроме комментария @ fedorqui, вы должны добавить [скрипка] (http://www.sqlfiddle.com) некоторые из ваших данных. – hd1

+0

вот ссылка fiddleup: http://www.sqlfiddle.com/#!2/86f3b/1 –

ответ

0

Вы никогда не задавали вопрос.

Одна вещь, которую я наблюдаю, заключается в том, что вы используете таблицу (uo) внутри подзапроса, которая не является частью подзапроса.

Может быть, вы ищете:

SELECT uo.*, COUNT(*) AS rank 
FROM tracks ui, tracks uo 
WHERE (ui.point, ui.id) >= (uo.point, uo.id) 
    AND uo.id = 10; 

трудно для меня, чтобы проверить его точность, не имея представления о том, что ваша таблица выглядит, или то, что ваш вопрос на самом деле.

+0

Этот запрос не будет работать, поскольку вы смешиваете агрегаты ('COUNT (*)') с неагрегированными полями. –

+0

Да, ему нужна ГРУППА BY, но у меня нет возможности узнать, что сгруппировать без дополнительных данных из OP. – thelr

0

Этот запрос должен работать, хотя он будет очень сильно масштабироваться.

SELECT * 
FROM (
    SELECT 
    uo.*, 
    (SELECT COUNT(*) FROM tracks ui WHERE (ui.point, ui.id) >= (uo.point, uo.id)) AS rank 
    FROM tracks uo WHERE id = 10 
) t 
ORDER BY t.rank DESC 
Смежные вопросы