分组 CONCAT 和 GROUP BY 问题



假设一个对象可以有多个tid

现在假设我执行此查询:

SELECT n.nid, t.tid, GROUP_CONCAT(t.tid) 
FROM node n JOIN term_node t ON t.nid = n.nid 
GROUP BY n.nid 
HAVING t.tid = 31;

我想在其中获取 tid = 31 的表节点中的条目......但我也想要一个与该行对应的所有 tid 的列表(因此是 GROUP_CONCAT),即使它们不是 31

使用 WHERE t.tid = 31 将从 GROUP concat 中省略不是 31 的 tid并且使用 HAVING t.tid = 31 将省略 GROUPed 行中显示的 tid 列不是 31 的行

无论哪种方式都有可能使GROUP_CONCAT列表不完整,或者至少有一个 tid = 31 的节点行

不完整

有没有办法解决这个问题,这样我就可以保证获得节点中至少有一个 tid 关联等于 31 并且GROUP_CONCAT将列出与该节点关联的所有 tid 列表的所有节点?

这可能最好作为 2 个查询。GROUP_CONCAT对生成的字符串的长度有限制,因此除非您知道将始终低于字符串长度限制,否则它不可靠。

我将运行第一个查询"WHERE tid = 31",然后运行一个单独的查询以获取所有其他 id 并在代码中组合。

最新更新