需要从一个非常混乱的mysql表中获取数据



表 1:

id  |  video_id  | group_id  |  img
=======================================
1   |  1         | 1         |  
2   |  2         | 1         | abc.png 
3   |  3         | 2         | bef.png 
4   |  4         | 3         | dca.png
5   |  5         | 1         |  
6   |  6         | 2         |  
7   |  8         | 1         |  

表 2:-

video_id  | week  |  count  |  type
===================================
1         | 2     |  2      |  0
2         | 2     |  1      |  1
1         | 3     |  5      |  0
1         | 3     |  3      |  1
3         | 3     |  4      |  0
1         | 3     |  1      |  0

现在我知道这个结构搞砸了,需要规范化,但由于我没有修改权,所以我被困住了。所以请耐心等待。

如您所见,第一个表在一个组中存储多个视频,每个组中只有一个视频可以具有关联的图像。第二个表存储每周视频观看的类型和计数。

现在,我需要一个 mysql 查询来获取特定一周内针对此视频的组 ID 的计数总和、视频 ID 和图像。问题是,图像是针对一个组的一个视频存储的,该视频可能具有也可能没有最高总和观看次数,但查询仍然需要针对具有该组图像的任何视频获取图像以及视频 ID 和具有最大观看次数的视频的其他信息。

有什么想法吗?

好的,抛开混乱的数据库结构,你的意思是什么:

但查询仍然需要针对任何 视频包含该组的图像

您究竟需要该组的用途?像这样的东西可能是你正在寻找的:

SELECT table2.video_id, SUM(table2.count), table1.group_id, table1.img FROM table2 
LEFT JOIN table1 ON table2.video_id = table1.video_id
GROUP BY table2.video_id;

这将选择视频 ID、总计数量(所有周)、group_id和属于该视频的图像。不过,任何检查都没有group_id,因为我不确定你想要什么。

除此之外,我也同意其他人的建议:尝试获得更好的结构化表格!

编辑:如果您需要同时获取图像和组ID,则可以运行以下查询,但它只会选择第一个不为空的img。所以你必须确保group_id和 set img 之间的关系是 1:1,否则可能会搞砸。

更新的查询将是:

SELECT * FROM 
    (SELECT table1.group_id,
          (SELECT tbl.img FROM table1 tbl WHERE tbl.group_id = table1.group_id AND img IS NOT NULL /*or whatever the empty value for img is*/ LIMIT 1) AS img,
          table2.video_id,
          SUM(table2.count) AS totalviews
    FROM table2 
    LEFT JOIN table1 ON table2.video_id = table1.video_id 
    GROUP BY table1.group_id, table2.video_id) 
    AS tmp
WHERE totalviews = (SELECT SUM(tbl2.count) FROM table2 AS tbl2 WHERE tbl2.video_id = tmp.video_id)
GROUP BY group_id;

最新更新