2017-09-12 10 views
3

次のSQLは、ビデオベースのオンラインコースシステムからのものです。クエリは、特定のユーザーのコースインスタンスを表示します。また、コースのどのビデオを視聴したか、まだ視聴していないかに関する情報を表示します。 watches_per_vidについては0の場合、MySQLカウント値は1を返します。

SELECT 
    GROUP_CONCAT(
     COALESCE(watches.num_watches, 0) ORDER BY cvi.position 
    ) AS watches_per_vid 
FROM course_instances tci 
LEFT JOIN videos 
    ON tci.node IN (
     SELECT node_id 
     FROM _taxonomy_assocs 
     WHERE item_id = videos.id 
    ) 
LEFT JOIN course_indexes cvi 
    ON videos.vimeo_id = cvi.vimeo_id 
    && cvi.course_id = tci.node 
LEFT JOIN (
    SELECT watches.vid_id, SUM(times) as num_watches 
    FROM watches 
    GROUP BY watches.vid_id 
) watches 
    ON watches.vid_id = videos.id 
WHERE tci.user = "vgaz1kjbc65" 
&& node = "jmi_gmoan26" #<-- for example 
GROUP BY tci.id 

私は、ユーザーがまだ映像を見ていない場合でも、ことを発見していますが、これは、例えば、

4,4,5,2,2,2,1 

の中に結果 - にエントリがないことこのユーザーとビデオのためのwatchesテーブル、それは1を生成し、0でない

ここでは、時計台です:

field   | type   | null | default   | extra 
------------------------------------------------------------------------------------------ 
id (primary)  varchar(11) n 
user_id   varchar(11) n 
vid_id   varchar(11) n 
latest_stamp  timestamp  n  CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
times    int(11)  n  1 

これはなぜ起こっているのか誰にでも見られますか?私はもちろん、必要に応じてより多くの構造コードを提供することができます。

+1

SELECT watches.vid_id, SUM(times) as num_watches FROM watches GROUP BY watches.vid_id 

を変更する必要がある場合、私はあなたがユーザーによって制限しているかの時計に表示されません参加者またはグループのいずれかでしたがって、ANYONEがビデオを見た場合、レコードが返されます。 – xQbert

+0

ありがとうございます。極端なルーキーエラー。答えの下のコメントを参照してください。 – Utkanos

+1

私たちは皆、当時/瞬間を持っています。時には目の別のペアが必要です。 – xQbert

答えて

3

表示されている時計表には、ユーザーとのリンクはありません。ユーザーが撮影したコースにリンクされているすべての動画について、各動画が(誰でも)視聴された回数が表示されます。

あなたがRHASを使う回数がビデオを見て、あなたは

SELECT watches.vid_id, SUM(times) as num_watches 
FROM watches 
WHERE watches.user_id = tci.user 
GROUP BY watches.vid_id 
+0

を追加するか、または「ON watches.vid_id = videos.id」と「watches.user_ID = tci.user」を関連付ける代わりに結合基準に追加し、user_IDを 'select and group by'に追加します。 – xQbert

+0

答えが「unknown column、tci.users」というエラーを生成しました。これはおそらく外部スコープを読み取ることができないためです。あなたがまだ問題を特定して(@xQbertと一緒に)いるので、概念のために+1してください。代わりに、結合基準を変更しました。あなたがた両方に感謝します。 – Utkanos

+0

odd ...私はmySQLが相関クエリをサポートしていると考えました。相関が働くように、それは1レベル以上深くありません。しかし、私たちが助けてくれることをうれしく思います – xQbert