【问题标题】:Multiple Row to One Row Making One Field Array?多行到一行制作一个字段数组?
【发布时间】:2014-08-15 08:59:30
【问题描述】:

可能有类似的答案,但我花了一个多小时搜索并试图建立相似性。分组有很多,但没有一个可以做我需要的。

基本上我想取多行并将它们合并为一行,将具有不同值的唯一列合并到一个数组中。我相信这些图片会有所帮助:

当前的SQL是:

SELECT mu.`firstname`AS firstname,
mu.`lastname`AS lastname,
mu.`username`AS username,
tu.`tagid` AS tagID
FROM user mu
LEFT JOIN tag_usertags tu ON (tu.`userid`= mu.`id`)
WHERE mu.id=10

目前:

----------------------------------------------------
|firstname | lastname     | username     | tagId   |
|--------------------------------------------------|
|Manager . | User  ....   |   manager..  |    2    |
|Manager . | User ....    |   manager..  |   11    |
|Manager . | User    .... |   manager..  |   46    |
|Manager . | User    .....|   manager..  |   8     |
|Manager . | User  ....   |   manager..  |   31    |
|Manager . | User    .... |   manager..  |   13    |
|Manager . | User   ....  |   manager..  |   41    |

我想看到的:

--------------------------------------------------------------------
|firstname | lastname       | username     |       tagId           |
|------------------------------------------------------------------|
|Manager.  | User  ......   |   manager..  | 2,11,46,8,31,13,41    |

【问题讨论】:

  • 你能解释一下为什么当前的结果集不令人满意吗?我没有看到您的预期输出的实际应用,但如果您仍然想要这样,您可以通过游标完成它。
  • 实际上会选择多个 ID,但这里没有必要过于复杂,因为它使人们更难以像我一样尝试做同样的事情。 Ende Neu 通过 group_concat 找到了完美的答案

标签: mysql sql join group-by


【解决方案1】:

你可以使用GROUP_CONCAT:

SELECT mu.`firstname`AS firstname,
  mu.`lastname`AS lastname,
  mu.`username`AS username,
  GROUP_CONCAT(tu.`tagid` SEPARATOR ',') AS tagID
FROM user mu
LEFT JOIN tag_usertags tu ON (tu.`userid`= mu.`id`)
WHERE mu.id=10
GROUP BY mu.`firstname`

【讨论】:

  • 这看起来是对的,虽然在第 4 行 GROUP_CONCAT(tu.tagid... 有什么想法吗?
  • @JoshJamesWillcock 我可能在组 concat 中犯了一个错误,我使用了反引号 (``) 而不是单引号 (''),我进行了编辑。
  • 我已经习惯了在 SQL 中看到反引号,我没有注意到自己...非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2017-04-06
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多