使用辅助表的PHP / MYSQL查询排名

时间:2011-09-23 15:18:31

标签: php mysql algorithm ranking

使用排名算法,但我对多个数据库调用和数据旋转感到沮丧,我必须通过计算特定项目的排名,将其输出到数组,然后排序依据等级值。在MySQL中是否可以根据其他表中的数据计算给定行的等级?

SELECT key_value FROM table;

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

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

然后基于3个其他表中的'abcd1'值,我需要根据除以总和的值对每个条目进行排名并返回排名然后输出它。有没有办法在单个SQL语句中完成所有这些操作?我已经考虑过设置一些sql变量并存储不同的调用然后进行计算,但是我仍然不确定如何将它分配给SELECT语句输出并相应地对其进行排序。我对PHP很好,但我有点像MySQL n00b。

这可能会让我感到困惑,因为我正在描述它 - 我可以回答更多问题以帮助更好地解释我正在尝试做的事情。

基本上,原始语句中返回的每一行实际上仅基于在其他3个表中存储的有关该对象的信息与每个用户相关。需要知道使用其他3个表中的数据来排列第一个表中数据的相关性的最佳方法。

1 个答案:

答案 0 :(得分:0)

这里的关键是你需要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或甚至使用子查询来获得适当的效果。