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

この構造がめちゃくちゃで、正規化する必要があることはわかっていますが、変更する権利がないため、これで立ち往生しています。だから我慢してください。

ご覧のとおり、最初のテーブルにはグループ内の複数の動画が格納されており、各グループ内の 1 つの動画のみが関連付けられた画像を持つことができます。2 番目のテーブルには、週ごとのビデオ ビューの種類と数が格納されます。

ここで、特定の週のこのビデオのグループ ID に対して存在するカウント、ビデオ ID、および画像の合計を取得するための mysql クエリが必要です。問題は、グループの 1 つの動画に対して画像が保存されることです。これは合計再生回数が最も多い場合とそうでない場合がありますが、それでもクエリは、そのグループの画像と動画 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は含まれていません。これは、何が必要かわからないためです。

これとは別に、私は他の人が提案することにも同意します:より良い構造化されたテーブルを手に入れよう!

編集:画像とグループ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;
于 2012-09-27T12:14:31.323 に答える