PHP/MYSQL查询排名使用二级表


PHP/MYSQL query ranking using secondary tables

使用排名算法,但我对多个数据库调用和数据循环感到沮丧,我必须通过计算特定项目的排名,将其输出到数组中,然后按排名值排序。是否有可能在MySQL中计算基于其他表中发现的数据的给定行的排名?

SELECT key_value FROM table;

现在,对于结果集,我需要根据关于这些项目的各种其他表信息对每个项目进行排名。如果输出是-

|key_value|
|abcd1    |
|abcd2    |
|abcd3    |

然后根据其他3个表中的'abcd1'值,我需要根据值除以total对每个条目进行排名,并返回排名,然后输出。是否有一种方法来做这一切在一个单一的SQL语句?我考虑过设置一些sql变量并存储不同的调用,然后进行计算,但我仍然不确定如何将其分配给SELECT语句输出并相应地对其进行排序。我擅长PHP,但我是一个MySQL n00b。

这可能使我描述它的方式令人困惑-我可以回答更多的问题来帮助更好地解释我正在尝试做的事情。

基本上,原始语句中返回的每一行实际上只与存储在其他3个表中的每个用户相关。需要知道使用其他3个表中的数据的最佳方法,以便对第一个表中数据的相关性进行排序。

这里的关键是您需要JOIN您的其他表,然后ORDER BY一些表达式在他们的字段。

SELECT key_value 
FROM table
LEFT JOIN table_b on table_b.field = table.key_value
LEFT JOIN table_c on table_c.field = table.key_value
LEFT JOIN table_d on table_d.field = table.key_value
ORDER BY table_b.some_field DESC, (table_c.another_field / table_d.something_else) ASC
;

根据连接条件的不同,您可能需要GROUP BY table.key_value甚至使用子查询来获得适当的效果。