【问题标题】:Selecting data as a single row when using select join in mysql在mysql中使用select join时选择数据作为单行
【发布时间】:2014-08-21 05:04:32
【问题描述】:

使用连接从两个表中选择数据时,如何在单行中从 mysql 查询中获取数据?

"id"    "itemId"    "itemTempId"    "itemName"                  "userId" "postId"
"1"     "US1"       "T001"          "Samsung Galaxy Note 5"     "1"      "1"

"id"    "itemId"    "itemTempId"    "itemImageName"     "userId" "postId"
"1"     "US1"       "T001"          "front.jpg"         "1"      "1"
"2"     "US1"       "T001"          "side-left.jpg"     "1"      "1"
"3"     "US1"       "T001"          "side-right.jpg"    "1"      "1"
"4"     "US1"       "T001"          "back.jpg"          "1"      "1"

现在,当我喜欢下面从第一个表中选择 1 行并从第二个表中选择相关行时,我会在每一行中获取所有数据,当我使用 php 打印它时也会重复。

select a.itemName, b.itemImageName from amga a left join amgb b on a.userId = b.userId where a.userId = 1;

电流输出

"itemName"                  "itemImageName"
"Samsung Galaxy Note 5"     "front.jpg"
"Samsung Galaxy Note 5"     "side-left.jpg"
"Samsung Galaxy Note 5"     "side-right.jpg"
"Samsung Galaxy Note 5"     "back.jpg"

理想的输出或其他一些不会重复 itemName 并且可以使用 php 轻松输出的变体。

"itemName"                  "itemImageName"
"Samsung Galaxy Note 5"     "front.jpg","side-left.jpg","side-right.jpg","back.jpg"

在最终结果中,标题只输出一次,而图像名称需要循环遍历。像这样:

"Samsung Galaxy Note 5"
"front.jpg","side-left.jpg","side-right.jpg","back.jpg"

【问题讨论】:

标签: php mysql sql


【解决方案1】:

您需要使用GROUP_CONCAT 函数进行分组。请尝试以下查询:

select a.itemName, group_concat(b.itemImageName) 
from amga a left join amgb b on a.userId = b.userId 
where a.userId = 1 
group by a.itemName;

【讨论】:

    【解决方案2】:
    select a.itemName, GROUP_CONCAT(b.itemImageName) 
    from amga a 
    left join amgb b 
    on a.userId = b.userId 
    where a.userId = 1
    group by a.itemName
    

    如果您不想重复,请在 GROUP_CONCAT 中使用 DISTINCT。

    【讨论】:

    • 在您的声明中,是否可以在itemImageName 列上使用limit 1,这样当我只需要输出一张图片时,我只得到一张图片,比如搜索结果等?跨度>
    • @Norman 您可以在 GROUP_CONCAT 结果上使用 SUBSTRING_INDEX 来获得一个结果这是一个随机小提琴示例 sqlfiddle.com/#!2/fb704/6 从每个组中选择第二个最大值。
    【解决方案3】:

    group_concat 运算符就是您要寻找的:

    SELECT    item_name, GROUP_CONCAT(item_image_name)
    FROM      amga
    LEFT JOIN amgb ON amga.userId = b.userId
    WHERE     amge.userId = 1
    GROUP BY  item_name
    

    【讨论】:

    • 在您的声明中,是否可以在itemImageName 列上使用limit 1,这样当我只需要输出一张图像时,我只得到一张图像,比如搜索结果等?跨度>
    • @Norman 你必须用子查询替换amgb,并在那里使用limit。否则,limit 将应用于完整的查询,这不是您想要的。
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2011-12-29
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多