0

アイテムのテーブルがあります。アイテムには id、スコア 1、スコア 2 があります。

12 個の既知のアイテムを ( を使用して) 選択し、それらをscore1WHERE id IN (....)と score2 の rank の合計であるスコアで並べ替えたいと考えています。ランクは、12 個のアイテムがランク付けされた場合のスコアの場所です。

mysqlでこれを行うにはどうすればよいですか?

編集:

4つの回答の後、解決策はおそらく予想よりも複雑であることがわかりました. 別の方法で質問させてください。

私が使用する場合select *, [calculation] from table where id IN (odered list of ids)。の元の順序付けられた ID リストの各 ID の位置をどうにかして使用できます[calculation]か?

4

3 に答える 3

2

私の頭から:

CREATE TEMPORARY TABLE t_1(score_1_rank INT AUTO_INCREMENT, id)
CREATE TEMPORARY TABLE t_2(score_2_rank INT AUTO_INCREMENT, id)

INSERT INTO t_1(id)
SELECT id
FROM items i
WHERE id IN () 
ORDER BY score_1

INSERT INTO t_2(id)
SELECT id
FROM items i
WHERE id IN ()
ORDER BY score_2

SELECT ...
FROM   items i
INNER JOIN t_1 t1
  ON t1.id = i.id
INNER JOIN t_2 t2
  ON t2.id = i.id
ORDER BY t1.rank + t2.rank

あなたの要求を正しく理解しましたか?

于 2009-07-08T12:12:50.627 に答える
0
SELECT id, score1, score2, 
    r1.rank AS rank1, 
    r2.rank AS rank2, 
    (r1.rank + r2.rank) rankSum
FROM items i
INNER JOIN (
    SELECT @rank := @rank + 1 AS rank, id
    FROM items, (SELECT @rank :=0) AS r
    ORDER BY score1
) AS r1 ON r1.id = i.id
INNER JOIN (
    SELECT @rank := @rank + 1 AS rank, id
    FROM items, (SELECT @rank :=0) AS r
    ORDER BY score2
) AS r2 ON r2.id = i.id
ORDER BY rankSum

しかし、クエリがクエリキャッシュを利用できないという理由だけでなく、これがどういうわけか非常に効率的であるとは思えません。

于 2009-07-08T12:21:55.403 に答える
0

これはあなたがしようとしていることですか?

SELECT
(CAST(score1 AS INT) + CAST(score2 AS INT)) AS rank
FROM items
WHERE id IN(...)
ORDER BY rank DESC
于 2009-07-08T12:09:48.073 に答える