2013-09-25 61 views
3

對於我的搜索索引,我需要創建一個sql來獲取用戶表的結果。通過獲取所有表結果的每個組的concat

例如,我有以下表格;

  • 標記(此表中我得到的所有標籤)
  • video_tags(此表中,我得到VIDEO_ID的相關標籤ID)
  • 視頻(所有視頻)

當我想用標籤獲取電影我使用後續查詢;

SELECT 
    videos.id, 
    videos.id AS video_id, 
    videos.video_title AS video_title, 
    Group_Concat(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
FROM videos 
JOIN video_tags AS vt ON vt.video_id = videos.id 
JOIN tags AS t ON t.tag_id = vt.tag_id 
WHERE videos.id = '10' 

這對我來說非常適合。

現在我需要從表中得到這樣的結果;

SELECT 
    videos.id, 
    videos.id AS video_id, 
    videos.video_title AS video_title, 
    Group_Concat(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
FROM videos 
JOIN video_tags AS vt ON vt.video_id = videos.id 
JOIN tags AS t ON t.tag_id = vt.tag_id 
WHERE videos.id <=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1) 

我在這裏面臨的問題是我如何使用group_concat函數。它將所有行 合併成一行(我能理解)。我的問題是,如何使用group_concat函數將所有標記結果放入單個字段,而不是PER行。

例如結果現在

id | video_id | video_title | tag_names 
1  1  title of id1 all tag_names from tags 

我想要什麼

id | video_id | video_title | tag_names 
1  1  title of id1 tags fort this row 
2  2  title of id2 tags fort this row 

回答

4
SELECT videos.id, 
     videos.id AS video_id, 
     videos.video_title AS video_title, 
     GROUP_CONCAT(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
FROM videos 
JOIN video_tags AS vt 
ON  vt.video_id = videos.id 
JOIN tags AS t 
ON  t.tag_id = vt.tag_id 
WHERE videos.id <= 
     (
     SELECT max_doc_id 
     FROM sph_counter 
     WHERE counter_id = 1 
     ) 
GROUP BY 
     videos.id 
+1

完美!當然這個團隊:)謝謝,我會盡可能地接受 – directory

相關問題