こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQLのSELECT文の書き方

MySQLで以下のようなテーブルがあります

【テーブル名】table_title
id │ title
─────
1 │ あ
2 │ い
3 │ う
4 │ え
5 │ お

【テーブル名】table_data
id │ data
─────
1 │ a
2 │ i
3 │ u
4 │ e
5 │ o

【テーブル名】table_cat
id │ cat
─────
1 │ 1
1 │ 2
1 │ 3
2 │ 1
2 │ 3
3 │ 2
3 │ 5
4 │ 2
4 │ 3
5 │ 1
5 │ 2
5 │ 3

ここからPHPで以下のような配列にしたいのですが、可能でしょうか?

Array
(
[0] => Array
(
[id] => 1
[title] => あ
[cat] => Array
(
[0] => 1
[0] => 2
[0] => 3
)
)
[1] => Array
(
[id] => 2
[title] => い
[cat] => Array
(
[0] => 1
[0] => 3
)
)
[2] => Array
(
[id] => 3
[title] => う
[cat] => Array
(
[0] => 2
[0] => 5
)
)
[3] => Array
(
[id] => 4
[title] => え
[cat] => Array
(
[0] => 2
[0] => 3
)
)
[4] => Array
(
[id] => 5
[title] => お
[cat] => Array
(
[0] => 1
[0] => 2
[0] => 3
)
)
)

投稿日時 - 2011-02-09 18:13:14

QNo.6510222

困ってます

質問者が選んだベストアンサー

>直接多次元配列で受け取ることは不可能でしょうか?

ないとはいわないですが、効率を考えれば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);

?>

投稿日時 - 2011-02-10 14:51:15

お礼

どうもありがとうございます!
御礼が遅くなり申し訳ありません。

ご回答を参考に、何とか希望の動作が実現できました。
おっしゃるようにexplodeでいくことにしました。

勉強になりました、ありがとうございました。

投稿日時 - 2011-02-14 10:15:05

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

だいぶ変ですね・・

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してやればいいでしょう

投稿日時 - 2011-02-10 11:01:25

補足

ご回答ありがとうございます。

申し訳ありません!ご指摘のようにだいぶ変でした。
正しくは以下のようにしたいです。

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ということでしょうか?
直接多次元配列で受け取ることは不可能でしょうか?

投稿日時 - 2011-02-10 12:55:55

あなたにオススメの質問