MySQL按ID分类加入ID到详细信息

时间:2015-09-26 11:52:23

标签: php mysql join

希望有人可以提供帮助。 MySQL JOIN语句从来都不是我的强项,它们只会伤害我的大脑,试图解决它们。

我有一个表,用于存储另一个表中项目的评级,并按ID跟踪。

我现在需要做的是显示按评级排序的项目列表,从高到低,从低到高。

我可以获得每个项目的评分列表,很容易从评级表中按ID分组,但它会加入到我坚持的项目中。并非所有项目都具有(尚未)评级,因此如果组合列表不会在确实存在的评级结束时停止,那么也将是有益的。

好的,所以这是我的分组声明:

SELECT  `themeID` , SUM(  `rating` ) AS ratings
FROM  `votes` 
GROUP BY  `themeID` 
ORDER BY  `ratings` DESC 

输出

themeID      ratings    
1             6
3             3
2             2
6             2

然后details表格包含各种信息,例如idfilenamenamedate

在两个表之间,themeIDid与它们相同。我已经查看了SO上类似查询的其他一些答案,但我无法得到任何与我的表/查询一起使用的答案(可能是因为我没有完全掌握{{ 1}}' S)

任何帮助都会让我头疼不已!

2 个答案:

答案 0 :(得分:2)

只需加入两个表并添加聚合函数。

SELECT d.id, d.filename, d.name, IFNULL(SUM(v.rating), 0) AS ratings
FROM details AS d
LEFT JOIN votes AS v ON d.id = v.themeID
GROUP BY d.id

我使用LEFT JOIN所以即使没有投票也会显示详细信息。

答案 1 :(得分:2)

我已经在sql server中测试了同样可以在Mysql中获取

      DROP TABLE #Item
    create table #Item (ID int identity(1,1),ItemNAme varchar(10))
    INSERT INTO #Item(ItemNAme)
    SELECT   'A'
    UNION ALL
    SELECT   'B'
    UNION ALL
    SELECT   'C'

    DROP TABLE #ItemRating
    create table #ItemRating (ItemID int ,rating int)
    INSERT INTO #ItemRating(ItemID,rating)
    SELECT   3,2
    UNION ALL
    SELECT   2,11
    UNION ALL
    SELECT   1, 3
    UNION ALL
    SELECT   2, 4
    union all
    SELECT   1,5
    UNION ALL
    SELECT   3,12
    UNION ALL
    SELECT   1, 4
    UNION ALL
    SELECT   2, 1

    SELECT m.ItemNAme,SUM(I.rating) as Rating
    FROM #Item m INNER JOIN #ItemRating I ON m.ID=I.ItemID
    group by m.ItemNAme
    ORDER BY SUM(I.rating) asc

    --OR same thing can achive 

    SELECT ItemNAme, Rating 
    FROM ( 
    SELECT m.ItemNAme,SUM(I.rating) as Rating
    FROM #Item m INNER JOIN #ItemRating I ON m.ID=I.ItemID
    group by m.ItemNAme
    )P
    ORDER BY Rating Desc