• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで同じDBから違う内容でカウントを繰り返す)

PHPで同じDBから違う内容でカウントを繰り返す方法とは?

このQ&Aのポイント
  • PHPで同じデータベースから異なる内容でカウントを繰り返す方法について知りたいです。
  • 現在、各クラスの田中・鈴木・佐藤の人数をMySQLのデータベースからカウントし、HTMLのテーブルで表示しています。
  • しかし、カウント用のPHPコードが非常に長くなってしまっています。よりスマートな方法はありますか?

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

  • ベストアンサー
  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

以下のようにUNION(読みはユニオンです。ウニオンではありません)でデータの取得を1回で済ませて表示の部分の記述を1箇所にする。という方法はあるかも知れません。 (SELECT '田中' AS 氏名, (SELECT COUNT(*) FROM table WHERE name LIKE '%田中%' AND class LIKE '%1組%') AS 1組, (SELECT COUNT(*) FROM table WHERE name LIKE '%田中%' AND class LIKE '%2組%') AS 2組) UNION ALL (SELECT '鈴木' AS 氏名, (SELECT COUNT(*) FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%1組%') AS 1組, (SELECT COUNT(*) FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%2組%') AS 2組)

rabbit-kimura
質問者

お礼

ありがとうございました!!

その他の回答 (1)

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

こんな風にテンポラリテーブルを使ってやるといいです ちなみに'%田中%'だと大田中とかひっかかりますがいいですか? //準備 create table hoge (id int,name varchar(20),class varchar(20)); insert into hoge values(1,'田中A','1組'),(2,'田中B','1組'),(3,'田中C','2組'),(4,'大田中A','1組'),(5,'佐藤A','2組'),(6,'佐藤B','2組'),(7,'佐藤C','2組'),(8,'鈴木A','1組'),(9,'鈴木B','1組'),(10,'鈴木C','1組'); //ここから create temporary table fuga(name varchar(20)); insert into fuga values('田中'),('佐藤'),('鈴木'),('高橋'); select fuga.name,sum(class like '%1組%') AS 1組,sum(class like '%2組%') AS 2組 from fuga left join hoge on hoge.name like concat('%',fuga.name,'%') group by name

rabbit-kimura
質問者

お礼

≫ちなみに'%田中%'だと大田中とかひっかかりますがいいですか? お、おおぅ!!確かに!! その辺も考慮して使います!! 回答ありがとうございました!!