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