gpt4 book ai didi

php - 优化 MySQL 查询以在单个查询中查找用户在不同测试中的排名

转载 作者:行者123 更新时间:2023-11-29 13:05:40 29 4
gpt4 key购买 nike

我正在使用查询来查找给定测试 ID 中用户的排名,这一次只提供一个测试的排名,我必须使用 foreach 来获取所有测试的测试排名。

SELECT * , t.UserRank
FROM (

SELECT * , (
@rownum := @rownum +1
)UserRank
FROM User_Date_Table, (

SELECT @rownum :=0
)t
WHERE my_test_id = '$test_id'
ORDER BY test_score DESC
)t
WHERE user_id = '$my_user_id'

是否可以生成一个查询,该查询可以为我在单个查询中进行的所有测试提供用户排名,因为这将多次减少数据库命中。

我必须找到 Test_Type_Id = $my_test_type_id(say) 的用户的所有级别,将 a.id 与 b.my_test_id 连接到 user_id = $my_user_id(say) 的用户

TABLE STRUCTURE

My_Test_Table (a)

id | name | Test_Type_Id
----------------------------------------------
1 | name_1 | 1
2 | name_2 | 1
3 | name_3 | 2
4 | name_4 | 1
5 | name_5 | 1
6 | name_6 | 2
7 | name_7 | 1
8 | name_8 | 2
9 | name_9 | 1



User_Date_Table (b)

id | my_test_id | user_id | test_score
---------------------------------------------------------
1 | 1 | 32 | 34
2 | 1 | 2 | 345
3 | 2 | 4 | 654
4 | 1 | 76 | 87
5 | 3 | 23 | 453
6 | 2 | 5 | 45
7 | 1 | 43 | 22
8 | 2 | 7 | 987
9 | 2 | 32 | 45
10 | 1 | 1 | 12
11 | 1 | 9 | 35
12 | 3 | 67 | 765
13 | 1 | 88 | 23
14 | 2 | 34 | 76
15 | 3 | 1 | 765
16 | 2 | 54 | 45
17 | 1 | 10 | 87
18 | 1 | 23 | 3
19 | 3 | 44 | 345
20 | 1 | 55 | 232
21 | 2 | 28 | 234
22 | 3 | 32 | 231

最佳答案

最简单的可能只是删除用于排名的用户变量并使用子查询来完成;

SELECT *, (SELECT COUNT(*)+1 
FROM User_Date_Table b
WHERE a.my_test_id = b.my_test_id
AND a.test_score < b.test_score) userrank
FROM User_Date_Table a
WHERE user_id = '1';

An SQLfiddle to test with .

关于php - 优化 MySQL 查询以在单个查询中查找用户在不同测试中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22741090/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com