我有多个项目表,按其评分/受欢迎程度“排序”。 我需要将所有表格合并到一个表格中,前10名。 前10个将结合一个条目(名称可能略有不同的通配符)出现在所有列表中的次数以及它在表格中的位置。 这可能吗? 我已经研究过Joins,但考虑到有两个因素(表中的条目和位置的nubmer),它似乎是一个非常复杂的过程。
道歉,我不认为我是这样做的。这是我关于stackoverflow的第一个问题
table 1 table 2 table 3
--------------------
bob | bob | Ian
fred | james |john
kate | fred | bob
mary | brian | brian
三个表的'排名'结果需要出现在决赛桌中(例如,称为'final') 正如你所看到的,Bob将在'final'中排名很高。 但伊恩只出现过一次,尽管他在表3中名列前茅。 弗雷德出现在第2位和第3位,所以他应该高于或低于伊恩。 我需要一个算法来进行排序吗?或者mySQl中有一些技巧可以检查排名吗?
答案 0 :(得分:0)
您可以使用排名返回它们,但您需要定义该排名的适用方式。
例如,如果您只是从每个表中返回排名,那么Bob会在第一个位置出现两次。如果你将这两个等级加在一起就会给出2.你如何将它与仅排名1的伊恩进行比较。
为此,您可能最好从最后一行构建排名(或将其计算为总行数 - 排名)。
您可以使用以下内容从每个表中获得基本排名: -
SELECT some_name, @rank_1:=@rank_1 + 1 AS ranking
FROM table_1
CROSS JOIN (SELECT @rank_1:=0) sub_1
UNION ALL
SELECT some_name, @rank_2:=@rank_2 + 1 AS ranking
FROM table_2
CROSS JOIN (SELECT @rank_2:=0) sub_2
UNION ALL
SELECT some_name, @rank_2:=@rank_2 + 1 AS ranking
FROM table_2
CROSS JOIN (SELECT @rank_2:=0) sub_3
但是这会给你每张表中的每条记录及其排名。
尽管如此,你无话可说Bob是table_1上的第一张唱片。虽然它可能是第一条记录,但就退回的订单而言,这并不确定。