###前提・実現したいこと
wp_posts、wp_tags、wp_tag_holders、という3つのテーブルがあります。(wp_という接頭辞は気にしないでください。)
tags.tag_name='red' and tags.tag_name='purple'
のように指定して「redとpurpleのタグを持つ記事」という取得をしたいのですが…
###発生している問題
…ですが、where
の指定がよくわからず、取得件数が0件になってしまいます。
###欲しい結果
「redとpurpleのタグを持つ記事」とは「tag_id=1とtag_id=5を持つ記事」になります。
つまり「post_id=1とpost_id=5の記事」であり以下の結果が欲しいです。
ID | content |
---|---|
1 | 赤くて緑で紫 |
5 | 赤くて紫 |
###テーブル設計
CREATE、INSERTです。
MySQL
1CREATE TABLE wp_posts ( 2 `ID` int, 3 `content` varchar(100), 4 PRIMARY KEY (`ID`) 5); 6INSERT INTO wp_posts 7 (`ID`, `content`) 8VALUES 9 (1, '赤くて緑で紫'),(2, '緑で紫'),(3, '赤'),(4, '青'),(5, '赤くて紫') 10; 11 12CREATE TABLE wp_tags ( 13 `ID` int, 14 `tag_name` varchar(10), 15 PRIMARY KEY (`ID`), 16 INDEX index_wp_tags_1 (`tag_name`) 17); 18INSERT INTO wp_tags 19 (`ID`, `tag_name`) 20VALUES 21 (1, 'red'),(2, 'green'),(3, 'blue'),(4, 'yellow'),(5, 'purple') 22; 23 24CREATE TABLE wp_tag_holders ( 25 `tag_ID` int, 26 `post_ID` int, 27 CONSTRAINT foreign_wp_tag_holders_01 FOREIGN KEY (`tag_ID`) REFERENCES wp_tags(`ID`), 28 INDEX index_wp_tag_holders_1 (`post_ID`) 29); 30INSERT INTO wp_tag_holders 31 (`tag_ID`,`post_ID`) 32VALUES 33 (1, 1),(2, 1),(5, 1),(2, 2),(5, 2),(1, 3),(3, 4),(1, 5),(5, 5) 34; 35
###取得のソースコード
以下で取得件数は0件でした。
MySQL
1select 2post.ID, 3post.content 4 5from 6wp_posts post 7left join 8wp_tag_holders tag_holders ON tag_holders.post_ID=post.ID 9left join 10wp_tags tags ON tags.ID=tag_holders.tag_ID 11 12where 13tags.tag_name='red' and tags.tag_name='purple'
###試したこと
上のjoin
したものをwhere
で指定できないのだと思い、join
の方向をやめて、次のようにIN
で指定するように試みましたが、こちらもエラーなどはないのですが、取得件数は0件でした。
MySQL
1select 2post.ID, 3post.content 4 5from 6wp_posts post 7 8where post.ID IN ( 9 select 10 tag_holders.post_ID 11 from 12 wp_tag_holders tag_holders 13 left join 14 wp_tags tags ON tags.ID=tag_holders.tag_ID 15 where 16 tags.tag_name='red' and tags.tag_name='purple' 17) 18 19
###バージョン
MySQLのバージョンは少し古めで5.6になります。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー