0

と呼ばれるコンテスト用の MySQL テーブルがありますusers。ここで、このテーブルを でソートする select ステートメントを作成できるようにしたいと考えていますpost_comp DESC, posted_last ASC。この並べ替えの後、最初に返される人は誰でも #1、2 番目の行は #2 などです。ただし、これをさらに進めて、テーブル内の特定のユーザーの位置を返したいと思います。現在、各ユーザーは独自の ID を持っていますzbidWHERE cid=3 AND post_comp>0また、クエリの最後に追加する必要があります。

これは私が試したことです:

SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, IF(u.zbid=123,1,0) AS me FROM users u, (SELECT @curRow := 0) r WHERE cid=3 AND post_comp > 0 ORDER BY u.post_comp DESC, u.posted_last ASC

ここ zbidpost_comp、特に返したい行の場合は 1、それ以外の場合は 0rowですmemeでユーザーの位置を探している場合zbid=123、テーブルをソートし、すべてのデータを私に戻し、ユーザーがどこにいてzbid=123も結果を返しme=1ます。row競争におけるユーザーの位置を示します。

今、私はこれでうまくいきます.唯一の問題は、これらの行をすべて返すことですme=1. 最後に別のものを追加しようとORDER BY me DESC LIMIT 1しましたが、以前の順序が台無しになり、機能しませんでした。他の提案はありますか?

4

1 に答える 1

2
SELECT * 
FROM (
  SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, 
         IF(u.zbid=123,1,0) AS me 
  FROM users u, (SELECT @curRow := 0) r 
  WHERE cid=3 AND post_comp > 0 
  ORDER BY u.post_comp DESC, u.posted_last ASC
) temp 
WHERE me=1
于 2012-08-15T23:24:05.417 に答える