0

假设一个对象可以有多个 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 列表?

4

1 回答 1

0

作为 2 个查询,这可能会更好。GROUP_CONCAT 对结果字符串的长度有一个限制,因此它是不可靠的,除非您知道您将始终处于字符串长度限制之下。

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

于 2012-10-11T22:51:36.067 回答