私は記事付きのデータベースを持っています。すべての記事にキーワードがあります。キーワードは、別のテーブルにあり、キーワードと記事はthusly、リレーショナルテーブルに接続されている:MySQLの外部キーの選択は一致します
記事
CREATE TABLE `articles` (
`id` int(11) NOT NULL,
`articleTitle` varchar(50) NOT NULL,
`articleBody` text NOT NULL,
`articlePermalink` varchar(50) NOT NULL,
`articleAuthor` int(11) NOT NULL,
`createdAt` datetime DEFAULT CURRENT_TIMESTAMP,
`updatedAt` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
キーワード
CREATE TABLE `keywords` (
`id` int(11) NOT NULL,
`keyword` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
articlekeywords
CREATE TABLE `articlekeywords` (
`id` int(11) NOT NULL,
`articleId` int(11) NOT NULL,
`keywordId` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
articles.idを識別子として使用して、特定の記事と共通のキーワードの一部またはすべてを持つすべての記事を選択したいとします。好ましくは、単一のSQL呼び出しで行う。
EDIT:
私は何Gordon Linoff suggested belowと非常によく似た何かをやってしまいました。
SELECT DISTINCT a.articleTitle, a.articlePermalink
FROM articles a
JOIN articlekeywords ak ON a.id = ak.articleId
JOIN articlekeywords ak2 ON ak.keywordId = ak2.keywordId AND ak2.articleId = $articleId AND not(a.id = $articleId)
私はある必要があると思いますOPが一致するキーワードを要求したときに、自分自身と行を結合するのを避けるためには、結合のidの不等式である必要があります。 – GurV
ええと、私はこれが私の必要としていることを確信していません。どのキーワードがどれくらい一致するかはわかりますが、一致する記事はありません。使用例:記事#1にはキーワードがあり、記事#2にもキーワードがあります。記事#nのマッチを検索すると、記事#1と#2を表示する必要があります。私がOPに書いたように、私は記事を選択する必要があります、一致するキーワードではありません。 –
私はこの答えを受け入れるつもりです。なぜなら私は元の質問で更新する非常に似たようなことをやってしまったからです。ありがとう、@ Gordon Linoff –