- ベストアンサー
MySQLのSELECT文の書き方
- MySQLのSELECT文の書き方について説明します。テーブルを結合したり条件を指定したりしてデータを取得する方法を解説します。
- MySQLのSELECT文は、テーブルを指定し、必要なカラムを指定してデータを取得します。さまざまな条件を指定することもできます。
- PHPで配列に結果を格納する場合、SELECT文の結果を連想配列として取得し、必要なデータを配列に追加する方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>直接多次元配列で受け取ることは不可能でしょうか? ないとはいわないですが、効率を考えればexplodeに一票 ちなみにSQLの結果はこんなかんじ id title data cats 1 あ a 1,3,2 2 い i 3,1 3 う u 5,2 4 え e 3,2 5 お o 3,2,1 <?PHP $sql=<<<eof SELECT id,title,data,group_concat(cast(cat as char)) as cats FROM table_cat INNER JOIN table_title USING(id) INNER JOIN table_data USING(id) GROUP BY id eof; $res=mysql_query($sql) or die($sql.mysql_error()); while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $array=&$arrays[]; $array["id"]=$row["id"]; $array["title"]=$row["title"]; $array["data"]=$row["data"]; $array["cat"]=explode(",",$row["cats"]); } print_r($arrays); ?>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
だいぶ変ですね・・ table_dataは使っていないですがよいですか? catの配列がもつ序数がおかしくないですか? とりあえずSQLはこんな感じで SELECT id,title,group_concat(cast(cat as char)) cats FROM table_cat INNER JOIN table_title USING(id) GROUP BY id うけたcatsを","でexplodeしてやればいいでしょう
補足
ご回答ありがとうございます。 申し訳ありません!ご指摘のようにだいぶ変でした。 正しくは以下のようにしたいです。 Array ( [0] => Array ( [id] => 1 [title] => あ [data] => a [cat] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => Array ( [id] => 2 [title] => い [data] => i [cat] => Array ( [0] => 1 [1] => 3 ) ) [2] => Array ( [id] => 3 [title] => う [data] => u [cat] => Array ( [0] => 2 [1] => 5 ) ) [3] => Array ( [id] => 4 [title] => え [data] => e [cat] => Array ( [0] => 2 [1] => 3 ) ) [4] => Array ( [id] => 5 [title] => お [data] => o [cat] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) ) なにぶんSQL初心者で、「group_concat」のところと「うけたcatsを","でexplode」というところが大事なのかな?という程度しか理解できませんでした。 「うけたcatsを","でexplode」というのは、PHPでexplodeということでしょうか? 直接多次元配列で受け取ることは不可能でしょうか?
お礼
どうもありがとうございます! 御礼が遅くなり申し訳ありません。 ご回答を参考に、何とか希望の動作が実現できました。 おっしゃるようにexplodeでいくことにしました。 勉強になりました、ありがとうございました。