Autor Zpráva
Ikki
Profil
Ahoj,
chtěl bych vypsat všechny existující data pro dané ID, jenže potřebuji aby tam byla možnost podmínky pro změnu (stáhnout/překládá se), viz kód.
          <table class="table table-sm">
  <thead>
    <tr>
      <th scope="col">Č. Epizody</th>
      <th scope="col">Název</th>
      <th scope="col">Možnosti</th> 
    </tr>
  </thead>
  <tbody>';              
$vyber_epizody = $mysqli->query("SELECT * FROM epizody WHERE id_filmu=".$_GET['id']." ORDER BY cislo_epizody");
while($vypis_epizody = $vyber_epizody->fetch_array()){
$ziskej_preklad = $mysqli->query("SELECT * FROM preklady WHERE id_epizody='".$vypis_epizody['cislo_epizody']."' AND id_anime='".$vypis_epizody['id_filmu']."'");
while($preklad = $ziskej_preklad->fetch_array()){echo '
    <tr>
      <th scope="row"># '.$vypis_epizody['cislo_epizody'].'</th>
      <td>'.$vypis_epizody['nazev_epizody'].'</td>
      <td>'; if($preklad['id_epizody'] == $vypis_epizody['cislo_epizody']){echo 'Stáhnout';}else{echo 'Překládá se';}echo'</td>  
    </tr>';}}
    echo '   </tbody>
</table>

Jenže při odstranění id_epizody='".$vypis_epizody['cislo_epizody']."' to nefunguje jak má.
Keeehi
Profil
Musíš přece odstranit i to následující AND, už nemá co spojovat a tak tam nepatří.
Ikki
Profil
To AND tam samozřejmě nenechávám, jenže pokud ponechám "WHERE id_anime...", tak to právě nefunguje tak jak já chci. Vypíše to dvakrát záznam, jeden špatný a jeden správný. Jenže já potřebuji aby se vypsaly veškeré epizody a pouze u těch, které jsou přeložené se ukázalo "Stáhnout" nebo "Překládá se", v tuto chvíli to funguje jen pokud v databázi mám překlad.
Keeehi
Profil
Aha, už chápu o co ti jde. Ještě teď potřebuji vědět, zda pro jednu epizodu může být 0-1 překlad nebo 0-n překladů. Jinak řečeno, zda epizoda může mít více než jeden překlad a pokud ano, jak to pak má ve výpisu vypadat.
Ikki
Profil
Určitě by mělo být možné aby to mělo více překladů, je tam uvedený autor, takže by se to mělo vypsat pod sebe a jen změnit data podle autora překladu. Případně aby se v kolonce "možnosti" vypsalo např. [1] [2] [3] podle překladu. Děkuji ti.
Keeehi
Profil
Udělal bych to nějak takto. To je ta první varianta, kde se další překlady vypisují pod ty předchozí. Jelikož se ale jedná o překlad stejné epizody, tak se tam vynechává číslo a jméno epizody, jelikož je uvedeno už u prvního překladu. Druhá možnost (1,2,3) je teochu složitější na zápis při tomto způsobu s jedním dotazem ale celkem primitivní v té variantě 1 + N dotazů, kterou jsi uvedl na začátku. Máš to téměř dobře, jen ten druhý while nemá být tam kde je, ale až v buňce tabulky s překladem.
<table class="table table-sm">
  <thead>
    <tr>
      <th scope="col">Č. Epizody</th>
      <th scope="col">Název</th>
      <th scope="col">Možnosti</th> 
    </tr>
  </thead>
  <tbody>
<?php
$lastEpizode = null; 
$result = $mysqli->query("SELECT * FROM epizody LEFT JOIN preklady ON epizody.cislo_epizody = preklady.id_epizody WHERE id_filmu=".$_GET['id']." ORDER BY cislo_epizody");
while($row = $result->fetch_array()){
    if ($row['id_epizody'] === null) { // epizoda nemá překlad
        echo '
            <tr>
                <th scope="row"># '.$vypis_epizody['cislo_epizody'].'</th>
                <td>'.$vypis_epizody['nazev_epizody'].'</td>
                <td>'Překládá se'</td>  
            </tr>
        ';
    } elseif ($row['id_epizody'] !== $lastEpizode) { // epizoda má překlad a ve výpisu se objevuje poprvé
        echo '
            <tr>
                <th scope="row"># '.$vypis_epizody['cislo_epizody'].'</th>
                <td>'.$vypis_epizody['nazev_epizody'].'</td>
                <td>Stáhnout</td>  
            </tr>
        ';
    } else { // epizoda má překlad ve výpisu se už objevilo a toto je jen další její překlad
        echo '
            <tr>
                <th scope="row"></th>
                <td></td>
                <td>Stáhnout</td>  
            </tr>
        ';
    }

    $lastEpizode = $row['id_epizody'];
?>
    </tbody>
</table>
Ikki
Profil
Keeehi:
Ahoj, zkoušel jsem to, jenže mi to při while vypíše chybu, tedy boolean, ale všechno odpovídá databázi a když jsem se to pokusil opravit a přepsat, tak jsem skončil tam, kde jsem začal.

Promiň, že tě s tím tolik otravuju, ale potřebuju to a nemůžu na to přijít, a když tam využiju 2x while, tak jsem opět na začátku..
Keeehi
Profil
Ikki:
Tak úplně správně ta moje varianta být nemusí. Píšu to rovnou sem. Abych měl jistotu, že to funguje, musel bych si k tomu vyrobit prototyp a vyzkoušet to. To ale udělat teď nemůžu jelikož jsem na delší dovolené a nemám s sebou počítač.
Ikki
Profil
Jasně, chápu. Nic se neděje, hlavně si užívej dovolenou:)

PS: ("SELECT * FROM epizody LEFT JOIN preklady ON epizody.cislo_epizody = preklady.id_epizody WHERE id_filmu=".$_GET['id']." ORDER BY cislo_epizody");

Tohle je správně, nebo tam je někde chyba? Dle mého je to v pořádku, ale prostě to nechce fungovat :(

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: