0

表格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 来获取图像以及具有最大观看次数的视频的其他信息。

有任何想法吗?

4

1 回答 1

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;
于 2012-09-27T12:14:31.323 回答