- ベストアンサー
PHPで同じDBから違う内容でカウントを繰り返す方法とは?
- PHPで同じデータベースから異なる内容でカウントを繰り返す方法について知りたいです。
- 現在、各クラスの田中・鈴木・佐藤の人数をMySQLのデータベースからカウントし、HTMLのテーブルで表示しています。
- しかし、カウント用のPHPコードが非常に長くなってしまっています。よりスマートな方法はありますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以下のように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組)
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
こんな風にテンポラリテーブルを使ってやるといいです ちなみに'%田中%'だと大田中とかひっかかりますがいいですか? //準備 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
お礼
≫ちなみに'%田中%'だと大田中とかひっかかりますがいいですか? お、おおぅ!!確かに!! その辺も考慮して使います!! 回答ありがとうございました!!
お礼
ありがとうございました!!