【发布时间】:2018-03-19 11:47:48
【问题描述】:
我有以下查询:
SELECT *, RES.res_id 'ID', RES.RES_Title 'Title',
GROUP_CONCAT(DISTINCT T.T_Name separator ', ') 'Topics',
GROUP_CONCAT(DISTINCT CH.CH_Code separator ', ') 'Chapters'
FROM Resources RES
LEFT JOIN topic_to_resource RT ON RT.RT_ResourceID = RES.RES_ID
LEFT JOIN topics T on T.T_ID = RT.RT_TopicID
LEFT JOIN topic_to_chapter TCH on TCH.TCH_TopicID = T.T_ID
LEFT JOIN chapters CH ON CH.CH_ID = TCH.TCH_FrameworkID
WHERE RES_Status = 'Active'
GROUP BY RES.RES_ID
ORDER BY RES_Title ASC, RES_Source DESC LIMIT 0, 10
对于每个 GROUP_CONCAT(主题和章节),我需要将列表转换为链接,同时保持 Distinct。
例如,代替上述查询的主题输出:体育、时事、政治、气候等。
我需要生成:
<a href="page.asp?topic=Sports" title="Sports">Sports</a>,
<a href="page.asp?topic=Current%20Events" title="Current Events">Current Events</a>,
<a href="page.asp?topic=Politics" title="Politics">Politics</a>,
<a href="page.asp?topic=Climate" title="Climate">Climate</a>
我可以通过在 GROUP_CONCAT 中嵌套一个 CONCAT 来实现链接,但是我失去了 Distinct。此外,我需要查询按资源 ID (RES.RES_ID) 分组。
关于如何完成不同主题和章节的链接列表的任何想法?
非常感谢!
【问题讨论】:
-
嗨。同样,阅读minimal reproducible example 并采取行动非常重要。这包括 DDL 和示例输入数据和所需的输出。此外,我们不知道“在保持独特性的同时列出链接”是什么意思——如果一个人已经知道你想要什么,但没有传达它,那只是一堆模糊的描述性草率的词。向我们展示您的“已经”。代码与任何东西有什么关系?我只是重复你上一个问题的评论。请采取行动。是的,很难说清楚和准确。所以努力吧。 (我已经告诉你完成某些句子。这样做。)
-
Strange duplicate behavior from GROUP_CONCAT of two LEFT JOINs of GROUP_BYs 的可能重复项。阅读左连接的定义。它返回内部联接所做的以及由空值扩展的不匹配的左行。你想要一个左连接的内连接。
-
@philipxy,再次感谢。我刚刚添加了当前生成的内容和需要生成的内容的示例。我还将准备并分享一个 SQL Fiddle。
-
@philipxy,我不敢苟同,这是您引用的帖子的副本。我的问题是关于如何在嵌套在 GROUP_CONCAT 中的 CONCAT 中维护“不同”。
-
请发布指向sqlfiddle.com 的链接以显示示例表。
标签: mysql distinct concat group-concat