0

私のテーブル スキーマは次のようになります。

table posts (id integer (primary key), parentid integer, tags varchar, ...)

スレッド内の最初の投稿であるすべての投稿の親 ID は NULL で、タグは文字列に等しくなります。スレッドの最初の投稿ではないその他の投稿。parentid はそのスレッドの最初の投稿の ID で、タグは NULL です。

特定のトピックのすべての「最初の投稿」を照会できます

SELECT * FROM posts WHERE tags LIKE '%topic%';

しかし、特定のトピックの応答を含むすべての投稿を照会するにはどうすればよいでしょうか?


このようなレコードがあるとします

id   parentid   tags
--------------------
123     null   topic
222     123     null
223     123     null
444     null   topic
555     null   hello

123、222、223、444 であるトピックについて話しているすべての ID を取得するにはどうすればよいですか?

4

1 に答える 1

3
SELECT * FROM posts 
WHERE tags LIKE '%topic%'
UNION ALL
SELECT * FROM posts 
WHERE PARENTID IN 
  (SELECT ID FROM POSTS WHERE tags LIKE '%topic%')

また

SELECT p.*, r.* FROM posts p
LEFT JOIN posts r ON r.ID = p.ID
WHERE p.tags LIKE '%topic%'

投稿に対して 1 行、応答ごとに 1 行を返すため、最初のほうがすっきりしていると思います。2 つ目はクエリとして実装する方が簡単ですが、結果の処理が難しく、データベースとスクリプトの間のトラフィックが増えるため、特に別のデータベース サーバーを使用している場合は無駄になります。

于 2012-11-30T00:45:23.570 に答える