2

タイトルにあるように、各記事に3枚の写真を表示しているすべてのブログ記事をリストしたいと思います。すべての記事に写真があるわけではありません。

結果の例

ここに画像の説明を入力してください

私の試み

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

これに関するどんな助けも素晴らしいでしょう。

4

1 に答える 1

3

group_concatはsubstring_indexで拡張できます

SUBSTRING_INDEX(
    GROUP_CONCAT(
        CONVERT(p.photo_id,CHAR(8)) 
        ORDER BY p.photo_id ASC 
        SEPARATOR ';'
    ),
    ';',
    3
) AS photos
于 2012-07-11T15:31:30.183 に答える