データベースquestionnaireのpostdataテーブルの中のhobbyカラム内に,区切りで音楽鑑賞…etc入っていて、
hobbyその他の値で自由なテキストが配列でimplodeで合体しています。
例 音楽鑑賞,ドライブ,旅行,寝ること
みたいな感じで入っています。
で以下の文みたいな感じで、その他の部分がある場合、フィールド数をカウントしたいのです。
php
1 2try{ 3$dsn = "mysql:dbname=questionnaire;host=localhost;charset=utf8"; 4$dbh = new PDO($dsn, 'root', '', array( 5PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 6PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 7PDO::ATTR_EMULATE_PREPARES => false, 8)); 9 10$prepare = $dbh->prepare('SELECT COUNT(id) AS id_all, 11 SUM(CASE WHEN gender = "男性" THEN 1 ELSE 0 END) AS male_count, 12 SUM(CASE WHEN gender = "女性" THEN 1 ELSE 0 END) AS female_count, 13 COUNT(hobby) AS hobby_all, 14 SUM(hobby LIKE "%音楽鑑賞%") AS "音楽鑑賞", 15 SUM(hobby LIKE "%映画鑑賞%") AS "映画鑑賞", 16 SUM(hobby LIKE "%ドライブ%") AS "ドライブ", 17 SUM(hobby LIKE "%旅行%") AS "旅行", 18 SUM(hobby LIKE "^(?!.*[\x01-\x7E]).*(?=[音楽鑑賞|映画鑑賞|ドライブ|旅行]).*$") AS "その他" 19 FROM postdata 20'); 21$prepare->execute(); 22$result = $prepare->fetch(); 23 24} catch(PDOException $e){ 25 26 header('Content-type: text/plain; charset=UTF-8, true, 500'); 27 exit($e->getMessage()); 28} 29 30header('Content-Type: text/html; charset=utf-8'); 31 32?>
適当にパターンマッチングしたかったのですが、"その他"の所がエラーになります。
LIKE文でそれぞれカウントできたのはいいのですが、どうしても"その他"の部分が難しいです。
どうしても文字列を含んでいるとそれ以降を処理してないかんじで……
fetchAll使ったほうがいいとか思ったのですが、同じような結果にするのに、配列扱うの難しくてSELECT文でやってます。
もし何か間違ってたらどうぞご指摘ください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/07/11 07:06