【问题标题】:CONCAT() result containing CONCAT()CONCAT() 结果包含 CONCAT()
【发布时间】:2014-07-16 07:04:16
【问题描述】:

数据库设置:

http://sqlfiddle.com/#!2/4d1c2/1

以下查询选择属于productID的所有标签及其位置,逗号分隔:

SELECT CONCAT_WS(',', GROUP_CONCAT(Tags.Name)) 
FROM `ProductTags` 
LEFT JOIN Tags ON ProductTags.TagID = Tags.TagID
WHERE `ProductID` = 46356
GROUP BY DisplayOrder

它可以包含 1-3 行。

更复杂的查询显示类别,充满(如 50-100)产品。 我希望所有标签一次可用,将它们传递给 juery 然后显示。

问题是:我如何将这个查询 concat() 到一个字段中,所以我只有一个大查询,或者我应该用 php 处理它并在页面上有大约 100 个查询?

【问题讨论】:

  • 考虑提供一些样本数据和预期结果。
  • @AbhikChakraborty 不知道这是否有帮助,但这里唯一的问题是“concat() 的 concat() 结果如何”。我需要这个结果表在其他查询中使用它,所以我希望它像“标签,标签,标签,标签;标签,标签;标签,标签”
  • @AbhikChakraborty sqlfiddle.com/#!2/4d1c2/1
  • 对于示例数据,请参见上面的链接,预期结果 - 结果集中的所有三行都在一个字符串中。

标签: mysql concatenation


【解决方案1】:

我不知道我是否正确,但这可能是一种解决方案:

SELECT CONCAT_WS(',', GROUP_CONCAT( DISTINCT Tags.Name)) 
FROM `ProductTags` 
LEFT JOIN Tags ON ProductTags.TagID = Tags.TagID

这将显示所有产品标签的所有标签。 (DISTINCT 使名称独一无二)

【讨论】:

  • 这个查询将产生与我的非常相似的结果,包含 3 行。我需要在其他查询中将此查询结果用作字段,包含所有产品。
  • 当您不使用 Group By 时?然后都在一行
  • 如何查看哪个标签属于哪个 displayOrder?
  • 这只能通过 GROUP BY 实现.....SELECT CONCAT_WS(',', GROUP_CONCAT( DISTINCT Tags.Name)) AS Tag, DisplayOrder FROM ProductTags LEFT JOIN Tags ON ProductTags.TagID = Tags.TagID GROUP BY DisplayOrder .....但是你不能将它们放在一行中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2012-08-10
  • 1970-01-01
  • 2017-08-17
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多