MySQL查询从A中选择行并组合B中的多行

时间:2015-05-19 15:13:17

标签: php mysql

在研究之后,显然这是一件复杂的事情吗?它看起来不像是一个透视查询,或者它应该是什么?无论如何,这样的两个表:

文章:

id    col2    col3
 1    ....    ....
 2    ....    ....
 3    ....    ....

articleImages:

id    imgFile    artRef
 1    img1.jpg   1
 2    img2.jpg   1
 3    img3.jpg   2
 4    .......    3
 5    .......    3
 6    .......    3

我想选择一切形式"文章"并结合" articleImages"进入行,所以它看起来像这样:

[{
    "id":"1",
    "col2":"...",
    "col3":"...",
    "imgFiles":{
        "img1.jpg",
        "img2.jpg"
    }
  },{
    "id":"2",
    "col2":"...",
    "col3":"...",
    "imgFiles":{
        "img3.jpg"
    }
  },{
    "id":"3",
    ...etc.
}]

我试过了:

"SELECT art.*, ai.imgFile FROM articles art LEFT JOIN articleImages ai ON art.id = ai.artRef ORDER BY art.id desc LIMIT $lim, $limit"

那是错的......每个图像都有不同的行。它不是LEFT JOIN ...这是什么语法?或者是否有更优化的组织方式?我不想制作一个" articleImages"列和内部连接"文章" ...

1 个答案:

答案 0 :(得分:1)

如果我的目标正确无误,您可以对查询进行分组并使用GROUP_CONCAT函数将所有逗号分隔的img名称放在一个字段中:

SELECT art.*, 
       GROUP_CONCAT(ai.imgFile) imgFiles
FROM articles art 
LEFT JOIN articleImages ai 
ON art.id = ai.artRef 
GROUP BY art.id
ORDER BY art.id desc 
LIMIT $lim, $limit