Autor Zpráva
XolyCZ
Profil
Ahoj, potřebuju poradit s tím, jak zapsat do už vytvořeného pole z prvního dotazu další prvek. V prvním dotazu si zjistím všechny základní věci a v druhém je potřebuju doplnit o něco dalšího. Nevím taky jestli na to jdu dobře s tou funkcí foreach, jestli se to tak dělá nebo ne, protože kolem toho nemůžu na netu nic najít. Poradí mi prosím někdo?

function showOverviewTournaments() {
    $spojeni = mysqli_connect('...');
    if (!$spojeni)
        die('Spojení s MySQL databází se nezdařilo.'); 
    mysqli_set_charset($spojeni,"utf8");
    $sql_select = "SELECT * FROM tournaments ORDER BY tournament_id DESC";
    
    $sql_select = mysqli_query($spojeni, $sql_select, MYSQLI_USE_RESULT);
    
    while($sql_select_array = mysqli_fetch_array($sql_select, MYSQLI_ASSOC)){
        $tournaments[] = $sql_select_array;
    }
    
    foreach($tournaments as $tournament){
        $sql_select = "SELECT tournament_type FROM tournament_types WHERE tournament_type_id=" . $tournament['tournament_type_id'];
        $sql_select = mysqli_query($spojeni, $sql_select, MYSQLI_USE_RESULT);
    
        while($sql_select_array = mysqli_fetch_array($sql_select, MYSQLI_ASSOC)){
            $tournaments['tournamet_type'] = $sql_select_array;     /*tady to potřebuju nějak zapsat*/
        }
    }
    
    return $tournaments;
    
    mysqli_close($spojeni);
}

Asi se bude jednat o to vícerozměrné pole nebo jak se tomu říká, ale já to nemůžu pořád pořádně pochopit. Nebo spíš jak to teď zapsat. V prvním dotazu jsem si zjistil tournament_type_id a teď potřebuju druhý dotaz do další tabulky, kde podle toho id najdu tournament_type, což je název toho typu turnaje.

Potom když to budu vypisovat, tak asi použiju

$tournaments = showOverviewTournaments();
foreach ($tournaments as $tournament => $detail){
  echo("<div class='tournaments'>
          <h3>" . htmlspecialchars($tournament['tournament_name']) . "</h3>
    <ul><li><span>Hraje se:</span> " . htmlspecialchars(Date( "d. m. Y", StrToTime($tournament['tournament_date']))) . "</li>
    <li><span>Typ hry:</span> " . htmlspecialchars($tournament['tournament_type']) . "</li></ul>");  /* a tady nevím..*/
}

A kdysi mi tu někdo říkal, že se nemám ve funkci pořád připojovat a odpojovat od databáze. Zná někdo nějaké stránky kde je to hezky popsané, jak se to má teda dělat? Děkuji moc..:)
T-fon
Profil
XolyCZ:
A kdysi mi tu někdo říkal, že se nemám ve funkci pořád připojovat a odpojovat od databáze. Zná někdo nějaké stránky kde je to hezky popsané, jak se to má teda dělat? Děkuji moc..:)

Stačí si řádek $spojeni = mysqli_connect('...'); vyhodit ven z těch funkcí, připojit se do databáze někde na začátku scriptu a pak voláš každou funkci s parametrem (což je ta proměnná s připojením do databáze), např. showOverviewTournaments($spojeni).
XolyCZ
Profil
T-fon:
A odpojování od té databáze mám potom hodit kam?
T-fon
Profil
Ideálně na konec scriptu, až ho nebudeš potřebovat :). A když ho tam nedáš, nic se nestane.
Jen tak v rychlosti sem kouknul na ten výpis z databáze. Takže každej turnaj má svoje ID a dle toho je v jiné tabulce přiřazenej typ? Proč neuděláš jeden dotaz s JOIN té druhé tabulky?
XolyCZ
Profil
No každý má svoje ID a potom ještě ID toho jaký je to typ turnaje. Potom ta druhá tablka obsahuje právě to ID toho typu a k tomu něco dalšího. No protože jsem to nevěděl nebo spíš to neznám. Podívám se a kdyžtak se ještě ozvu, zatím díky :)
Keeehi
Profil
Tvůj dotaz by šel zapsat takto:
    foreach($tournaments as $key =>$tournament){
        $sql_select = "SELECT tournament_type FROM tournament_types WHERE tournament_type_id=" . $tournament['tournament_type_id'];
        $sql_select = mysqli_query($spojeni, $sql_select, MYSQLI_USE_RESULT);
    
        while($sql_select_array = mysqli_fetch_array($sql_select, MYSQLI_ASSOC)){
            $tournaments[$key]['tournamet_type'] = $sql_select_array;
        }
    }
Ovšem bude to strašně neefektivní, jelikož pro každý turnament se musí poslat dotaz do databáze na jeho typ. Šlo by zlepšit keší, že by jsi měl pole kam by se ukládali výsledky dotazů pro jednotlivá tournament_type_id. Nejdříve by jsi se podíval do toho pole, jestli tam už daný tournament_type_id máš a pokud ano, vrátíš jeho obsah. Pokud ne, uděláš dotaz do databáze, výsledek uložíš do toho pole a taky ho vrátíš. Ovšem nejlepší řešení je si ty informace přidat pomocí joinu už v SQL dotazu, jak psal T-fon.
XolyCZ
Profil
Tak jsem z toho vytvořil tohle, je to delší na zápis, ale funguje to přesně jak jsem chtěl..Díky moc :)

function showOverviewTournaments($spojeni) {
    $sql_select = "SELECT tournaments.tournament_id, tournaments.season_id, tournaments.tournament_name, tournaments.tournament_max_players, tournaments.tournament_date, tournaments.tournament_basic_games, tournaments.tournament_finally_games, tournaments.tournament_description, tournament_types.tournament_type FROM tournaments INNER JOIN tournament_types ON tournaments.tournament_type_id = tournament_types.tournament_type_id ORDER BY tournament_id DESC";
    $sql_select = mysqli_query($spojeni, $sql_select, MYSQLI_USE_RESULT);
    while($sql_select_array = mysqli_fetch_array($sql_select, MYSQLI_ASSOC)){
        $tournaments[] = $sql_select_array;
    }
    return $tournaments;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0