4

わかりました。これを行うためにいくつかの方法を試しましたが、どれも機能しないため、表示するコードがありません。しかし、私はこれをできる限り説明します。

コンテストスクリプトがあり、現在の勝者のリストの下でユーザーがどの場所にいるかを示す行を追加したいと思います。だから私はテーブルをこのように見せたいのです。

-----------------------------------------
| Place |    User   | Prize | Completed |
|   1   | Someuser1 | $5.00 |     5     |
|   2   | Someuser2 | $2.50 |     3     |
|   3   | Someuser3 | $1.25 |     2     |
|   20  |    You    |  ---  |     1     |
-----------------------------------------

私はいわゆる一部のユーザーのためにすべてを持っていますが、ページを表示している現在のユーザーがコンテストのどこに立っているかを確認できる場所を数えたいと思います。現在のユーザーがいる場所を取得するために、どのようなクエリを実行できますか。

コードがなくてもそれが理にかなっていることを願っています。

テーブル構造

    Column   |  Type | Null |  Default
--------------------------------------
    id       |int(11)|  No  |   
    username |text   |  No  |   
    completed|int(11)|  No  |   
4

2 に答える 2

2

これを行うにはいくつかの方法があります。1つは、指定された行よりもランクが高い行の数を数えることです。

SELECT COUNT(*) AS Place, t.*
FROM TheTable t
LEFT OUTER JOIN TheTable t2 ON t.Prize < t2.Prize
GROUP BY t.id
HAVING Place <= 3 OR user = 'You';

もう1つは、セッション変数を使用してランキングを追跡することです。

SELECT * FROM (
  SELECT (@row := COALESCE(@row, 0)+1) AS Place, t.*
  FROM TheTable t
  ORDER BY Prize DESC) r
WHERE Place <= 3 OR user = 'You';
于 2012-11-24T23:49:48.323 に答える
0

さて、私が理解していることから、私がそれを行うことを考えることができる2つの方法があります。

  1. 2つのクエリがあります。最初のクエリで上位3つを取得し、次に1つでユーザーの場所を取得します

    # First query to get top three
    
    if (  user not in top three) {
         $db->prepare('SELECT whatever FROM table WHERE user = ?')->execute(array($user));
    }
    
  2. すべての結果を取得し、上位3つを表示して、現在のユーザーの1つを表示します。

編集:ビルの答えはより良いようです:)

于 2012-11-24T23:49:11.767 に答える