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 を持つテーブルノードのエントリをフェッチしたい...しかし、31 でなくても、その行に対応するすべての tid のリストも必要です (したがって、GROUP_CONCAT)。

WHERE t.tid = 31 を使用すると、GROUP 連結から 31 でない tid が除外され、HAVING t.tid = 31 を使用すると、GROUP 化された行に表示される tid 列が 31 でない行が除外されます。

どちらの方法でも、GROUP_CONCAT リストが不完全になるか、少なくとも 1 つの tid = 31 を持つノードの行が不完全になる可能性があります。

ノードに少なくとも 1 つの tid 関連付けが 31 に等しいすべてのノードを取得することが保証され、GROUP_CONCAT がそのノードに関連付けられている tid のリストをすべてリストするように、これを解決する方法はありますか?

4

1 に答える 1

0

これはおそらく2つのクエリの方が良いでしょう。とにかく GROUP_CONCAT には、結果の文字列の長さに制限があるため、常に文字列の長さの制限を超えていることがわかっていない限り、信頼できません。

最初のクエリ「WHERE tid = 31」を実行してから、別のクエリを実行して他のすべての ID を取得し、コードで結合します。

于 2012-10-11T22:51:36.067 に答える