SELECT links.*
FROM links
INNER JOIN (
SELECT keywords_links.link_id
FROM keywords_links
INNER JOIN keywords ON keywords_links.keyword_id = keywords.id
WHERE keywords.keyword
IN ("facebook", "google", "apple")
GROUP BY keywords_links.link_id
) t
ON links.id = t.link_id
これは、キーワードに一致するリンクを返します。links
、keywords
、およびの3 つのテーブルがありkeywords_links
ます。keywords_links
キーワードをリンクでリンクします。
このクエリをより効率的にするにはどうすればよいですか? 私は MySQL に不慣れなので、基本的な MySQL コマンドを使用してこのクエリを作成する必要がありました。
表 (関連情報のみ表示):
リンク:
CREATE TABLE IF NOT EXISTS `links` (
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=337789 ;
キーワード_リンク:
CREATE TABLE IF NOT EXISTS `keywords_links` (
`keyword_id` int(11) NOT NULL,
`link_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
キーワード:
CREATE TABLE IF NOT EXISTS `keywords` (
`id` int(11) NOT NULL auto_increment,
`keyword` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sort` (`id`,`keyword`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=60363 ;