0

mySQL でより複雑なクエリを作成する方法を学ぶのは非常に難しいと感じています。

この質問を通じて、単一のクエリ内でマルチレベルのクエリを開発する方法について、さらに洞察を得ることができれば幸いです。

私はタグ付けシステムを持っています。

tbl1: ktbridge
ktbridge_id
threads_id
keywords_id

tbl2: threads
threads_id
subject
etc

tbl3: keywords
keywords_id
keyword
related_id

以上が私の現在の設定です。

データについては、次のものがあります。

INSERT INTO `ktbridge` (`ktbridge_id`, `threads_id`, `keywords_id`) VALUES
(1, 1, 9);

INSERT INTO `keywords` (`keyword_id`, `keyword`, `related_id`) VALUES
(5, 'Sports', 0),
(6, 'Baseball', 5),
(7, 'football', 5),
(8, 'Curling', 5),
(9, 'Pitchers', 6),
(10, 'Catchers', 6),

INSERT INTO `threads` (`threads_id`, `subject`, `body`, `users_id`, `timestamp`, `replystamp`) VALUES
(1, 'Sports - Baseball - Pitchers - Subject', 'Sports - Baseball - Pitchers - Body', 1, '2013-01-09 14:09:40', '0000-00-00 00:00:00');

ここでの目標は、提供された keyword_id に関連するスレッドを返すことです。

難しいのは、「野球」を選択すると、野球のスレッドが返されることです。ただし、「sports」が選択されている場合は、テーブル内の「related_id」に基づいて、それより下のすべてのスレッドが返されkeywordsます。したがって、野球、フットボール、およびカーリングに基づくすべてのスレッドが返されます。

これは可能性がありますか?それとも、複数のクエリが必要ですか? 前もって感謝します!

4

1 に答える 1

1

複数のクエリが必要ですが、それらをネストして、内側の選択内から選択できます。以下はうまくいくはずです(または少なくとも始めてください)。これは MySQL ですが、他の RDBM システムに移植できる必要があることに注意してください。

SELECT * FROM `threads` WHERE `threads`.`threads_id` IN (
  SELECT `threads_id` FROM `ktbridge` WHERE `ktbridge`.`keywords_id` IN (
    SELECT `keywords_id` FROM `keywords` 
      WHERE `keywords`.`id` = 5 OR `keywords`.`related_id` = 5
    )
  );

「IN」の MySQL ドキュメント リファレンス

于 2013-01-09T17:51:14.990 に答える