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
)
)
)
No.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);
?>
どうもありがとうございます!
御礼が遅くなり申し訳ありません。
ご回答を参考に、何とか希望の動作が実現できました。
おっしゃるようにexplodeでいくことにしました。
勉強になりました、ありがとうございました。
No.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してやればいいでしょう
この回答への補足
ご回答ありがとうございます。
申し訳ありません!ご指摘のようにだいぶ変でした。
正しくは以下のようにしたいです。
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ということでしょうか?
直接多次元配列で受け取ることは不可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数テーブルのGROUP BY の使い...
-
メルペイとメルペイid決済の違...
-
1テーブル&複数レコードの更新...
-
エクセルの関数について教えて...
-
フィールド名を変数で指定するには
-
エクセルからOutlookメールを起...
-
VBでストアドプロシージャ一覧...
-
SQLite3でこんな便利なSQLはで...
-
エクセルで最後の文字だけ置き...
-
MySQLのストアドプロシージャ記...
-
insertを高速化させたい
-
バインド変数について
-
カラム情報取得方法
-
SQL Left Join で重複を排除す...
-
クエリ表示と、ADOで抽出したレ...
-
VMware Player でCD-ROMドライ...
-
Access:クエリーにて集計後に...
-
1、Rstudioで回帰直線を求める...
-
カーソル宣言をIFで分けられま...
-
フィルターかけた後、重複を除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
複数テーブルのGROUP BY の使い...
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] UNIQUE制約の値を更新...
-
テーブル名を省略して「h.id」...
おすすめ情報