私はバスケットボールリーグのテーブル、チームのテーブル、そして次のような選手のテーブルを持っています:
LEAGUES
ID | NAME |
------------------
1 | NBA |
2 | ABA |
TEAMS:
ID | NAME | LEAGUE_ID
------------------------------
20 | BULLS | 1
21 | KNICKS | 2
PLAYERS:
ID | TEAM_ID | FIRST_NAME | LAST_NAME |
---------------------------------------------
1 | 21 | John | Starks |
2 | 21 | Patrick | Ewing |
リーグIDを指定して、そのリーグのすべてのチームからすべてのプレーヤーの名前とチームIDを取得したいので、次のようにします。
SELECT t.id AS team_id, p.id AS player_id, p.first_name, p.last_name
FROM teams AS t
JOIN players AS p ON p.team_id = t.id
WHERE t.league_id = 1
これは次を返します:
[0] => stdClass Object
(
[team_id] => 21
[player_id] => 1
[first_name] => John
[last_name] => Starks
)
[1] => stdClass Object
(
[team_id] => 21
[player_id] => 2
[first_name] => Patrick
[last_name] => Ewing
)
+ around 500 more objects...
この結果を使用して、各チームのプレーヤーのリストを含む各チームのドロップダウンメニューにデータを入力するので、結果をチームIDでグループ化したいので、これらのドロップダウンを作成するループは、代わりに各チームIDを循環するだけで済みます。毎回500人以上のプレイヤー全員。
しかし、次のようにGROUP BYを使用すると、次のようになります。
SELECT t.id AS team_id, p.id AS player_id, p.first_name, p.last_name
FROM teams AS t
JOIN players AS p ON p.team_id = t.id
WHERE t.league_id = 1
GROUP BY t.id
このように各チームから1人のプレーヤーのみが返され、同じ列名が使用されているため、同じチームの他のすべてのプレーヤーがオーバーライドされます。
[0] => stdClass Object
(
[team_id] => 21
[player_id] => 2
[first_name] => Patrick
[last_name] => Ewing
)
[1] => stdClass Object
(
[team_id] => 22
[player_id] => 31
[first_name] => Shawn
[last_name] => Kemp
)
etc...
私はこのようなものを返したいです:
[0] => stdClass Object
(
[team_id] => 2
[player_id1] => 1
[first_name1] => John
[last_name1] => Starks
[player_id2] => 2
[first_name2] => Patrick
[last_name2] => Ewing
+10 more players from this team...
)
+25 more teams...
どういうわけか可能ですか?