表 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;