我有一个查询,从表中选择20行,循环,并从同一个表中拉出一行,达到所需的分数范围。然后删除找到的行,以便不再选择它。
user_id是唯一的,有些行的col1 = 0而其他行的col1 = 1,因此第二个查询永远不会从第一个查询中选择一行。
临时表如下所示:
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
我得到20行,temp.user_id是唯一的,但与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吗?
答案 0 :(得分:0)
也许您可以在子查询中将LIMIT 20
更改为LIMIT 1
?