【问题标题】:MySQL JOIN ratings by ID to details by IDMySQL JOIN 按 ID 评分到按 ID 的详细信息
【发布时间】:2015-09-26 11:52:23
【问题描述】:

希望有人可以提供帮助。 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 的类似查询的其他一些答案,但我无法获得任何与我的表/查询一起使用的答案(可能是因为我没有完全掌握 JOIN's)

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

【问题讨论】:

    标签: php mysql join


    【解决方案1】:

    只需将两个表连接起来并添加聚合函数即可。

    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,所以即使没有投票,它也会显示详细信息。

    【讨论】:

    • 轰隆隆!谢谢这很好:)我现在可以看到,当我之前尝试时,我的表在 JOIN 中混在一起了。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多