質問: mysql_fetch_assoc($result)){ $sum += $row['cnt']; } echo $sum; } ``` ### 出力結果 ``` 1 2 2 ``` この最終的な合計値である「2」のみを表示させたいのですが、while文であるため、どうしてもループ処理で表示されてしまいます。。 お手数ですが、ご教授いただけると助かります。
回答: mysql_系の関数をつかっています? 話にならないくらい古いので環境再構築を検討ください ちなみにmysqlのレコードの中で更にmysqlで検索するって ちょっと意図がわかりません すなおに ``` SELECT count(*) AS cnt FROM at_postmeta WHERE meta_value = '参加'and meta_key = '件名1' ``` してください 参考までに ``` COUNT(meta_value = '$sanka' OR null) AS cnt ↓↓↓ SUM(meta_value = '$sanka') AS cnt ``` だと思います テーブルの設計から ========= ``` create table tbl(id int primary key, イベント名 varchar(10), 名前 varchar(10), 件名1 varchar(10), 件名2 varchar(10)); insert into tbl values (1,'役員会議','山田太郎','参加','不参加'), (2,'役員会議','田中花子','参加','参加'), (3,'合同イベント','鈴木一郎','不参加','不参加'); ``` 無理やりやってみる ========= ``` create table at_postmeta(post_id int,meta_key varchar(10),meta_value varchar(10)); insert into at_postmeta values (1,'イベント名','役員会議'), (1,'名前','山田太郎'), (1,'件名1','参加'), (1,'件名2','不参加'), (2,'イベント名','役員会議'), (2,'名前','田中花子'), (2,'件名1','参加'), (2,'件名2','参加'), (3,'イベント名','合同イベント'), (3,'名前','鈴木一郎'), (3,'件名1','不参加'), (3,'件名2','不参加'); ``` * 検索 ``` select post_id,名前,件名1,参加1,件名2,参加2 from ( select t1.post_id, group_concat(case meta_key when "名前" then meta_value else null end) 名前, group_concat(case meta_key when "件名1" then meta_value else null end) 件名1, group_concat(case meta_key when "件名2" then meta_value else null end) 件名2 from at_postmeta as t1 inner join (select post_id from at_postmeta where meta_key='イベント名' and meta_value='役員会議') as t2 on t1.post_id=t2.post_id group by post_id ) as sub1 right join ( select t1.post_id, sum((meta_key="件名1")*(meta_value="参加")) 参加1, sum((meta_key="件名2")*(meta_value="参加")) 参加2 from at_postmeta as t1 inner join (select post_id from at_postmeta where meta_key='イベント名' and meta_value='役員会議') as t2 on t1.post_id=t2.post_id group by post_id with rollup ) as sub2 using(post_id) ``` * 結果 | post_id | 名前 | 件名1 | 参加1 | 件名2 | 参加2 | | --- | --- | --- | --- | --- | --- | | 1 | 山田太郎 | 参加 | 1 | 不参加 | 0 | | 2 | 田中花子 | 参加 | 1 | 参加 | 1 | | NULL | NULL | NULL | 2 | NULL | 1 |