例えばCDの収録曲などの例がわかりやすいかとは思うのですが
cd_list(CDリスト)
cd_list_id | cd_name |
---|---|
1 | 1st.シングル |
2 | 2st.シングル |
3 | 3st.シングル |
4 | 1st.アルバム |
music_list(CDリスト)
music_list_id | cd_list_id | music_name |
---|---|---|
1 | 1 | おはよう |
2 | 1 | こんにちわ |
3 | 2 | さようなら |
4 | 2 | おやすみなさい |
5 | 3 | またね |
6 | 3 | バイバイ |
7 | 4 | ニーハオ |
8 | 4 | ハロー |
9 | 4 | おはー |
10 | 4 | グッバーイ |
11 | 4 | ボンジュール |
12 | 4 | テッテレー |
```sql | ||
create table cd_list(cd_list_id int,cd_name varchar(126)); | ||
insert into cd_list values(1,'1st.シングル'),(2,'2st.シングル'),(3,'3st.シングル'),(4,'1st.アルバム'); |
create table music_list_id(id int, cd_list_id int, music_name varchar(126));
insert into music_list_id values(1,1,'おはよう'),(2,1,'こんにちわ'),(3,2,'さようなら'),(4,2,'おやすみなさい'),(5,3,'またね'),(6,3,'バイバイ'),(7,4,'ニーハオ'),(8,4,'ハロー'),(9,4,'おはー'),(10,4,'グッバーイ'),(11,4,'ボンジュール'),(12,4,'テッテレー');
のようなテーブルがある際に普段 ```php function dbConnect(){ error_reporting(E_ALL & ~E_NOTICE); try{ $pdo = new PDO(DSN, DB_USER, DB_PW); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); }catch(PDOException $e){ error_info($e, __FILE__); die(); } return $pdo; } //DBへアクセス $pdo = dbConnect(); //クエリを投げる $sql ='SELECT T1.cd_list_id, cd_name, music_name FROM cd_list AS T1 LEFT JOIN music_list AS T2 ON T1.cd_list_id = T2.cd_list_id'; $stmt = $pdo->query($sql); $stmt->execute(); //配列に追加 foreach($stmt as $row){ if(!$array_box[$row["cd_list_id"]]){ $array_box[$row["cd_list_id"]] = [ "cd_name1" => $row["cd_name"], "music_name" => [] ]; } $array_box[$row["cd_list_id"]]["music_name"][] = $row["music_name"]; }
と言った形で無理やりif文で配列を作っています。
無駄な処理なきがしてならないのですが、やはりこちらのやり方は正攻法なやり方ではないのでしょうか?
取得データ的には問題ないのですが、なんだかあまりすっきりしません。
もし他に方法がありましたらご教授いただきたいす。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー