質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

960閲覧

n件以上ある記事を持つタグを取得する(MySQL)

premiummalts

総合スコア3

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2020/12/07 18:32

編集2020/12/07 19:02

前提・実現したいこと

記事とタグのテーブルがあります
「記事は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の件数
13
23

###目的の値
目的はこのような値です
tag_ID=1を持つのは4件
tag_ID=2を持つのは3件
tag_ID=4を持つのは3件
他は「記事は3件以上」に合致しないので取得されず、レコードは次の3件としたいです

tags_IDそのタグを持つcontents_IDの件数
14
23
43

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

group by tags_ID
でした

投稿2020/12/07 19:07

premiummalts

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/12/07 22:55

エラーではないけど、無意味にカッコを多用して可読性を下げるのは止めた方が良いかと。 HAVING ((Count(*))>=3) ↓ HAVING Count(*) >= 3
premiummalts

2020/12/07 22:57

ありがとうございます!ネットで調べてコピペしただけでした…気を付けます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問