前提・実現したいこと
記事とタグのテーブルがあります
「記事は3件以上」という条件をクリアして、タグを取得したいです
該当のソースコード
・記事のテーブルとしてcontentsがあります
・タグのテーブルとしてtagsがあります
・記事が持つタグのテーブルとしてtag_relationsがあります
sql
1-- 記事 2CREATE TABLE contents 3 (`ID` int, `user_ID` int) 4; 5INSERT INTO contents 6 (`ID`, `user_ID`) 7VALUES 8 (1, 10), 9 (2, 20), 10 (3, 30), 11 (4, 10), 12 (5, 30), 13 (6, 40), 14 (7, 10), 15 (8, 50), 16 (9, 10), 17 (10, 20), 18 (11, 30), 19 (12, 50), 20 (13, 50), 21 (14, 60), 22 (15, 30), 23 (16, 10), 24 (17, 50), 25 (18, 30), 26 (19, 40), 27 (20, 10) 28; 29 30-- タグ 31CREATE TABLE tags 32 (`ID` int, `tag_name` varchar(100)) 33; 34INSERT INTO tags 35 (`ID`, `tag_name`) 36VALUES 37 (1, 'タグ1'), 38 (2, 'タグ2'), 39 (3, 'タグ3'), 40 (3, 'タグ4'), 41 (3, 'タグ5'), 42 (3, 'タグ6') 43; 44-- タグリレーション 45CREATE TABLE tag_relations 46 (`tags_ID` int, `service_id` int, `kind_id` int, `contents_ID` int ) 47; 48INSERT INTO tag_relations 49 (`tags_ID`, `service_id`, `kind_id`, `contents_ID` ) 50VALUES 51 # contents_ID=1が、tag_ID=1とtag_ID=2を持っている 52 (1, 1, 1, 1), (2, 1, 1, 1), 53 # contents_ID=2が、tag_ID=1を持っている 54 (1, 1, 1, 2), 55 # contents_ID=4が、tag_ID=1とtag_ID=3とtag_ID=4を持っている 56 (1, 1, 1, 4), (3, 1, 1, 4), (4, 1, 1, 4), 57 # contents_ID=5が、tag_ID=5を持っている 58 (5, 1, 1, 5), 59 # contents_ID=8が、tag_ID=1を持っている 60 (1, 1, 1, 8), 61 # contents_ID=9が、tag_ID=2とtag_ID=4を持っている 62 (2, 1, 1, 9), (4, 1, 1, 9), 63 # contents_ID=10が、tag_ID=2とtag_ID=4とtag_ID=6を持っている 64 (2, 1, 1, 10), (4, 1, 1, 10), (6, 1, 1, 10) 65;
そして実現したいことのために書いたのはこちらのコードです
「記事は3件以上」という条件を
「HAVING ((Count(*))>=3)」で表現しているつもりです
sql
1select tags_ID, Count(*) AS そのタグを持つcontents_IDの件数 2from tag_relations 3where kind_id = 1 AND service_id = 1 4group by contents_ID 5having((Count(*))>=3)
現在の値
上記コードによって得られる値は次のようになります
tags_ID | そのタグを持つcontents_IDの件数 |
---|---|
1 | 3 |
2 | 3 |
###目的の値
目的はこのような値です
tag_ID=1を持つのは4件
tag_ID=2を持つのは3件
tag_ID=4を持つのは3件
他は「記事は3件以上」に合致しないので取得されず、レコードは次の3件としたいです
tags_ID | そのタグを持つcontents_IDの件数 |
---|---|
1 | 4 |
2 | 3 |
4 | 3 |
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/07 22:55
2020/12/07 22:57