查询从同一行中的表中获取多个记录

时间:2014-09-27 11:43:18

标签: mysql

我的数据库中有两个表,如下所示:

porfolio

id  | title  | content
----+--------+-------------------
1   |  hello | aksjdhaksd..
2   |  hi    | asdasd..
----+--------+-------------------

portfolio_image

id  | portfolio_id  | image
----+---------------+-------------------
1   |  1            | a.jpg
2   |  1            | b.jpg
3   |  2            | c.png
4   |  2            | d.png
----+---------------+-------------------

我想获取数据,以便从同一行的第二个表中获取投资组合表中的所有数据及其各自的图像:

我的意思是这样的:

id  | title | content       | image1 | image2
----+-------+---------------+--------+-------------
1   | hello | aksjdhaksd..  | a.jpg  | b.jpg
2   |  hi   | asdasd..      | c.png  | d.png
----+-------+---------------+------------------------------

请帮帮我

1 个答案:

答案 0 :(得分:1)

如果每个投资组合只有两个图像,那么你可以这样做:

select p.id, p.title, p.content,
       min(pi.image) as image1,
       (case when max(pi.image) <> min(pi.image) then max(pi.iamge) as image2
from portfolio p join
     portfolio_image pi
     on p.id = pi.portfolio_id
group by p.id, p.title, p.content;

如果您有多个图片,最简单的方法是使用group_concat()将它们放入一个列中:

select p.id, p.title, p.content, group_concat(pi.image) as images
from portfolio p join
     portfolio_image pi
     on p.id = pi.portfolio_id
group by p.id, p.title, p.content;

如果您有多张图片,请不要知道有多少图片,希望每张图片都在一个单独的列中。然后你需要一个动态的支点。我建议你google&#34; mysql dynamic pivot&#34;找一些例子。