• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このMysql文の結果をこうしたい…)

Mysql文の結果を特定のタグで絞り込みたい方法

このQ&Aのポイント
  • PHPとMysqlを使用して、特定のタグで結果を絞り込む方法について質問です。
  • tagsテーブルから「うどん」と「そば」のタグに関連する結果を抽出するためのMysql文を作成したいです。
  • 回答いただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

仕様の詰め次第ですね tagとu_idの組み合わせがユニークかどうかでやり方が異なります たとえばu_id=5の人が一度「そば」を登録した後にダブって「そば」を 登録できるかどうかということ 仮にuniqueを前提にすればこんな感じ //元データ create table tags(id int not null primary key auto_increment,tag varchar(30),u_id int,unique (tag,u_id)); insert into tags values(1,'うどん',5),(2,'そば',5),(3,'うどん',2),(4,'ラーメン',2),(5,'そうめん',1),(6,'そば',3); //ユーザーごとにうどんorそばに合致する件数 SELECT u_id, sum(tag in('うどん','そば')) as agr FROM tags GROUP BY u_id ORDER BY agr DESC //うどんかつそばに合致するユーザー SELECT u_id FROM tags GROUP BY u_id having sum(tag in('うどん','そば'))=2

auau5656
質問者

お礼

回答有り難うございます。

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

HAVING句を使って「うどん」と「そば」がそれぞれ一回以上出現しているものだけを抽出すればよいです。 例) ------------------------------------ SELECT u_id, count(CASE WHEN tag = "うどん" or tag = "そば" THEN 1 ELSE NULL END ) AS `agr` FROM tags GROUP BY u_id HAVING SUM(CASE WHEN tag = "うどん" THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN tag = "そば" THEN 1 ELSE 0 END) > 0 ORDER BY agr DESC ----------------------------------------

参考URL:
http://codezine.jp/article/detail/652
auau5656
質問者

お礼

回答有り難うございます。

関連するQ&A