0

テーブルから 20 行を選択し、ループして、目的のスコア範囲にある同じテーブルから単一の行を取得するクエリがあります。見つかった行は、再度選択されないように削除されます。

user_id は一意であり、col1=0 を持つ行と col1=1 を持つ行があるため、2 番目のクエリは最初のクエリから行を選択することはありません。

一時テーブルは次のようになります。

user_id  col1
-------------------
1        0
2        0
3        1
4        1

ユーザーテーブルは次のようになります。

user_id   score
-----------------
1         1000
2         2000
3         3000
4         4000

$res = do_query("SELECT temp.user_id,user.score 
        FROM temp,user
        WHERE temp.col1=0 AND temp.user_id=user.user_id LIMIT 20");

while (($row = mysql_fetch_row($res))) {
    $score = $row[1];

    $alt_res = do_query("SELECT temp.user_id, user.score
        FROM temp,user
        WHERE temp.col1=1 AND temp.user_id=user.user_id 
        AND user.score<$score AND user.score>$score*0.66 LIMIT 1");

    $alt_row = mysql_fetch_row($alt_res)
    $user_id = $alt_row[0];

    do_query("DELETE FROM temp WHERE user_id=$user_id");
}

これは問題なく機能しますが、これを単一のクエリに変換しようとしましたが、重複した値を取得し続けており、それらを取り除くことができないようです。

 SELECT temp.user_id,t1.user_id,t1.score FROM (
 SELECT temp.user_id,user.score
 FROM temp,user
 WHERE temp.col1=0 AND temp.user_id=user.user_id LIMIT 20) AS t1,temp,user
 WHERE temp.col1=1 AND temp.user_id=user.user_id 
 AND t1.score<user.score AND t1.score>user.score*0.66 GROUP BY temp.user_id

temp.user_id が一意である 20 行を取得しますが、t1.user_id と重複しています。

例えば:

temp.user_id    t1.user_id
----------------------------
1               6
2               7
3               7 
4               7
5               8

そして私が欲しい:

temp.user_id      t1.user_id
-----------------------------
1                 6
2                 7
3                 8 
4                 9
5                 10

どちらの列でも user_id が繰り返されないようにする方法はありますか?

4

1 に答える 1

0

たぶん、サブクエリに変更できLIMIT 20ますLIMIT 1か?

于 2012-07-14T19:59:34.530 に答える