| Autor | Zpráva | ||
|---|---|---|---|
| XolyCZ Profil |
Ahoj, potřebuju poradit. Tahám z databáze nějaké data. Asi nebudu rozepisovat co co znamená, jde to poznat z názvů, ale jedná se mi o jednu věc. Mám udělanou tabulku s pozvánkama od jiných týmů a k těm týmům potřebuju vytáhnout ještě hráče, kteří v těch týmech už jsou. Momentálně to vypadá takhle..příklad pole:
Array ( [0] => Array ( [teamID] => 7 [teamName] => FTWjedeBomby [teamType] => Duo [playerID] => 4 [nickname] => Xoly ) [1] => Array ( [teamID] => 7 [teamName] => FTWjedeBomby [teamType] => Duo [playerID] => 11 [nickname] => FTW_Čokoládka ) ) A já bych potřeboval, aby to bylo uspořádané trošku jinak. Aby ten jeden tým byl pod jedním polem a v tom poli by bylo další pole, ve kterém by byl danný hráč. Dá se to udělat nějak pomocí jednoho příkazu? Já to mam teď takhle: function getTeamInvites($pdo, &$getTeamInvitesMessage){
$stmt = $pdo->prepare("SELECT teamInvitedPlayers.teamID, teams.teamName, teams.teamType, playersInTeams.playerID, players.nickname
FROM teamInvitedPlayers
LEFT JOIN teams ON teamInvitedPlayers.teamID=teams.teamID
LEFT JOIN playersInTeams ON playersInTeams.teamID=teams.teamID
LEFT JOIN players ON playersInTeams.playerID=players.player_id
WHERE teamInvitedPlayers.playerID=?");
$stmt->execute([$_SESSION['playerID']]);
$teamInvites = $stmt->fetchAll();
print_r($teamInvites);
} |
||
| RastyAmateur Profil |
#2 · Zasláno: 13. 6. 2019, 00:11:26
XolyCZ:
Obávám se, že v příkazu nedokážeš udělat pole v poli (nebo jsem to alespoň neviděl). Budeš to muset vyřešit nějakým jednoduchým cyklem. |
||
| Tomášeek Profil |
XolyCZ:
Je to tak, mysql neumí zgroupovat záznamy do vícerozměrného pole. Data z databáze vytahuj tak, jak to máš teď, a finální pole si vytvoř z vrácených výsledků. $array = [];
foreach ($teamInvites as $row) {
$array[$row['teamID']][] = $row;
} |
||
| Kajman Profil |
#4 · Zasláno: 13. 6. 2019, 09:06:57
Případně něco jako
$array = [];
foreach ($teamInvites as $row) {
// udaje o tymu, pokud jeste nejsou ulozene z drivejsich radku
if(!isset($array[$row['teamID']])) {
$array[$row['teamID']] = [
'teamID' => $row['teamID'],
'teamName' => $row['teamName'],
'teamType' => $row['teamType'],
'players' => []
];
}
//udaje o hraci
$array[$row['teamID']]['players'][$row['playerID']] = [
'playerID' => $row['playerID'],
'nickname' => $row['nickname']
];
}
$teamInvites = $array; |
||
| XolyCZ Profil |
#5 · Zasláno: 13. 6. 2019, 09:46:22
Kajman:
No to je to co jsem chtěl. Já jsem to mezitím ještě udělal po svém, ale je to oproti tvému špatné řešení, protože se to odvíjí od dalších dotazů na databázi.. To tvoje vypíše tohle: Array ( [7] => Array ( [teamID] => 7 [teamName] => FTWjedeBomby [teamType] => Duo [players] => Array ( [4] => Array ( [playerID] => 4 [nickname] => Xoly ) [11] => Array ( [playerID] => 11 [nickname] => FTW_Čokoládka ) ) ) [8] => Array ( [teamID] => 8 [teamName] => FTW squad [teamType] => Squad [players] => Array ( [8] => Array ( [playerID] => 8 [nickname] => Adis ) [16] => Array ( [playerID] => 16 [nickname] => SiVi ) ) ) ) A to moje jsem udělal takhle: $stmt = $pdo->prepare("SELECT teamInvitedPlayers.teamID, teams.teamName, teams.teamType
FROM teamInvitedPlayers
LEFT JOIN teams ON teamInvitedPlayers.teamID=teams.teamID
WHERE teamInvitedPlayers.playerID=?");
$stmt->execute([$_SESSION['playerID']]);
$teamInvites = $stmt->fetchAll();
$team=0;
foreach($teamInvites as $oneTeam){
$stmt = $pdo->prepare("SELECT playersInTeams.playerID, players.nickname FROM playersInTeams LEFT JOIN players ON playersInTeams.playerID=players.player_id WHERE teamID=?");
$stmt->execute([$oneTeam['teamID']]);
$teamPlayers[$team] = $stmt->fetchAll();
$team++;
}
$getTeamInvites['teamInvites'] = $teamInvites;
$getTeamInvites['teamPlayers'] = $teamPlayers;
Array
(
[teamInvites] => Array
(
[0] => Array
(
[teamID] => 7
[teamName] => FTWjedeBomby
[teamType] => Duo
)
[1] => Array
(
[teamID] => 8
[teamName] => FTW squad
[teamType] => Squad
)
)
[teamPlayers] => Array
(
[0] => Array
(
[0] => Array
(
[playerID] => 4
[nickname] => Xoly
)
[1] => Array
(
[playerID] => 11
[nickname] => FTW_Čokoládka
)
)
[1] => Array
(
[0] => Array
(
[playerID] => 8
[nickname] => Adis
)
[1] => Array
(
[playerID] => 16
[nickname] => SiVi
)
)
)
)
|
||
| Kajman Profil |
V tom tvém by nemuselo být pole $teamPlayers, ale je možné to dát do toho prohledávaného
foreach($teamInvites as $key => $oneTeam){
...
$teamInvites[$key]['players'] = $stmt->fetchAll();
}Ale pro každý tým se takto dělá znovu dotaz, což bývá většinou nejpomalejší řešení, viz Srovnání dotazů do závislých tabulek |
||
| XolyCZ Profil |
#7 · Zasláno: 13. 6. 2019, 20:52:57
Kajman:
Díky za radu, nakonec použiju radši teda to tvoje. |
||
|
Časová prodleva: 6 let
|
|||
0