2012-07-11 40 views
2

正如標題所示,我想列出顯示每篇文章3張照片的所有博客文章。並非每篇文章都有照片。MySQL - 爲每個博客文章記錄抓取3張照片記錄

示例結果

enter image description here

我嘗試

SELECT a.article_id, a.title, a.content, a.published, t.topic_title, au.firstname, au.lastname, 
GROUP_CONCAT(CONVERT(p.photo_id,CHAR(8)) ORDER BY p.photo_id ASC SEPARATOR ';') AS photos 
FROM blog_articles a 
LEFT JOIN photos p USING (article_id) 
LEFT JOIN blog_topics t ON a.topic_id = t.topic_id 
LEFT JOIN admins au ON a.author_id = au.admin_id 
GROUP BY a.article_id 

將會產生分隔的照片ID的列表,就像我想要一個冒號,但我真的只需要3,不他們全部。很明顯,我可以在應用程序代碼中抓取3個ID,但我想停止收集MySQL中的所有數據。這就是它產生:

14 This is a blog title 2012-07-09 12;13;14;15;16;17;18;19;20;21;22;23;24;25 

但我要的是:

14 This is a blog title 2012-07-09 12;13;14 

任何幫助,在此將是巨大的。

回答

3

您可以substring_index

SUBSTRING_INDEX(
    GROUP_CONCAT(
     CONVERT(p.photo_id,CHAR(8)) 
     ORDER BY p.photo_id ASC 
     SEPARATOR ';' 
    ), 
    ';', 
    3 
) AS photos 
+0

嗨延長你的GROUP_CONCAT,感謝。假設一篇文章有​​100張照片。這實際上是否會停止所有100個ID的生成,還是將100個減少到3個? – TheCarver 2012-07-11 20:06:18

+0

其concat全部爲100到一個字符串,然後在第3個'''剪切字符串,所以結果包含最多3個ID – 2012-07-11 20:38:50