douai2499 2014-09-01 02:06 采纳率: 100%
浏览 544
已采纳

Mysql在复杂查询中使用GROUP_CONCAT加入

我遇到了一个运行查询的问题,我有三个表:

categories

| id  | name       | 
| --- | ---------- | 
| 1   | Logo       | 
| 2   | Poster     |
| 3   | Stationary | 
| 4   | Web        |
| 5   | Projects   | 
| 6   | Sporadic   | 

photos

| id  | portid | image            | preveiw |
| --- | ------ | ---------------- | ------- |
| 171 | 30     | a30preview.jpg   | 1       |
| 172 | 30     | b30.jpg          |         |
| 173 | 30     | c30.jpg          |         |
| 174 | 32     | a32preview.jpg   | 1       |
| 175 | 32     | b32.jpg          |         |
| 176 | 33     | a33preview.jpg   | 1       |
| 179 | 33     | b33.jpg          |         |
| 180 | 41     | a41preview.jpg   | 1       |

portfolios

| id  | catid  | type  | title        | text         | date   |
| --- | ------ | ----- | ------------ | ------------ | ------ |
| 30  | 2      | M     | xxxxxxxx     | xxxxxxxx     | xxxxxx |
| 32  | 2      | M     | xxxxxx       | xxxxxx       | xxxxxx |
| 33  | 2      | L     | xxxxxxxxxx   | xxxxxxxxxx   | xxxxxx |
| 41  | 1      | L     | xxxx         | xxxx         | xxxxxx |
| 45  | 2      | L     | xxxxx        | xxxxx        | xxxxxx | <-(This record has no image in 'photos' table, so it's not in 'output')

我想把这些记录作为输出(其中name=‘post’):

| id  | catid  | name     | type  | title        | text         | date   | image   <-(first image is the one that has 'photos.preview' = 1)|
| --- | ------ | -------- | ----- | ------------ | ------------ | ------ | ---------------------------------- |
| 30  | 2      | Poster   | M     | xxxxxxxx     | xxxxxxxx     | xxxxxx | a30preview.jpg, b30.jpg, c30.jpg   |
| 32  | 2      | Poster   | M     | xxxxxx       | xxxxxx       | xxxxxx | a32preview.jpg, b32.jpg            |
| 33  | 2      | Poster   | L     | xxxxxxxxxx   | xxxxxxxxxx   | xxxxxx | a33preview.jpg, b33.jpg            |

我尝试过以下SQL语句:

select * from `portfolios` 
   inner join `categories` on `portfolios`.`catid` = `categories`.`id` 
   inner join `photos` on `portid` = `portfolios`.`id` 
where `categories`.`name` = "Poster"

当然,它不起作用,因为我不知道我应该把GROUP_CONCAT放在哪里。

展开全部

  • 写回答

3条回答 默认 最新

  • douyanyan1123 2014-09-01 02:12
    关注

    Considering, that GROUP_CONCAT() is an aggregate function, you have to use GROUP BY to get desired resultset. You may try this:

    SELECT
        `portfolios`.*,
        `categories`.*,
        GROUP_CONCAT(
            `photos`.`image`
                ORDER BY `photos`.`preveiw` DESC
                SEPARATOR ', '
        ) as `image`
    FROM
       `portfolios` 
           INNER JOIN `categories` ON `portfolios`.`catid` = `categories`.`id` 
           INNER JOIN `photos` ON `portid` = `portfolios`.`id` 
    WHERE
        `categories`.`name` = 'Poster'
    GROUP BY
        `portfolios`.`id`
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 QGC打开没有地图显示,离线地图也不显示,如何解决?
  • ¥20 Android Studio 的 webview 与访问网络存在的限制
  • ¥15 某帖子的数据集不清楚来源,求帮助
  • ¥50 tc358743xbg寄存器配置
  • ¥15 idea构建mod报错无效的源发行版项目链接,如何解决?
  • ¥15 springboot中的路径问题
  • ¥80 App Store Connect 中设置了订阅项目,Xcode 中预览可以正确显示价格,真机测试却无法显示
  • ¥15 MATLAB的PIV算法问题
  • ¥15 RflySim例程学习:matlab编译报错
  • ¥20 谁来给我解答一下疑惑
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部