找到最受欢迎的' mySQL中多个表中的项目

时间:2014-06-17 09:55:40

标签: mysql

我有多个项目表,按其评分/受欢迎程度“排序”。 我需要将所有表格合并到一个表格中,前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中有一些技巧可以检查排名吗?

1 个答案:

答案 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上的第一张唱片。虽然它可能是第一条记录,但就退回的订单而言,这并不确定。