-2

この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
4

2 に答える 2

0

あなたは決して質問をしませんでした。

私が観察していることの1つは、副選択の一部ではない副選択内でテーブル(uo)を使用していることです。

多分あなたは探しています:

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

あなたのテーブルがどのように見えるか、またはあなたの質問が実際に何であるかを知らずに、その精度をテストするのは難しいです。

于 2013-02-26T16:05:00.363 に答える
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
于 2013-02-26T16:15:53.050 に答える