表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查询来获取计数的SUM,视频ID以及针对特定周的此视频的组ID存在的图像。问题是,图像是针对一个组的一个视频存储的,该视频可能有也可能没有最高的总和视图,但是查询仍然需要根据该组的图像以及视频ID来获取图像。以及具有最大观看次数的视频的其他信息。
有什么想法吗?
答案 0 :(得分:0)
好的,将凌乱的数据库结构排除在外,你对此意味着什么:
但是查询仍然需要针对哪一个获取图像 视频包含该组的图像
你究竟在哪里需要这个小组?这样的事情可能就是你想要的:
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,因为我不确定你想要什么。
除此之外,我同意其他人的建议:尝试获得更好的结构化表格!
编辑:如果你需要将图像和groupid放在一起,你可以运行以下查询,但它只会选择第一个非空的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;