キーワードに基づいてテーブルから一連の記事を選択できるSQLステートメントを作成しようとしています。私がこれまでに持っているのは、トークンテーブル、記事テーブル、およびトークンと記事の多対多のテーブルです。
tokens
rowid
token
token_article
token_rowid
article_rowid
articles
rowid
私がやっていることは、検索クエリを取得し、それをスペースで分割してから、それらのキーワードを含むすべての記事を選択することです。これまでのところ、私はこれを思いついた:
select * from
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'ABC'
) as t1,
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'DEF'
) as t2
where t1.article_rowid = t2.article_rowid and t2.article_rowid = articles.rowid
これは機能しますが、もちろん、ABCに一致するすべての記事とDEFに一致するすべての記事を選択してから、それらを選択します。
今、私はより良い方法を見つけようとしています。私が頭の中でうまくいくと思うのは、ABCに一致するすべての記事を選択し、それらの中からDEFに一致する記事を選択することです。これは私が想像しているように見えますが、機能しません(「そのような列はありません:tokens.rowid」というエラーメッセージを受け取ります)
select * from
(select * from
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'ABC'
)
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'DEF'
)