Autor Zpráva
bery2
Profil
VYPSÁNÍ html tabulky ze dvou tabulek db s ověřením hodnot

Dobrý den,

mám takový problémek s vytvořením tabulky:

$i5="1";
      while ($detail_rastru=MySQL_Fetch_Array ($ukaz_rastr)):         
        $trida_id=$detail_rastru["id"];
        $detail_rastru_trida[$trida_id]=$detail_rastru["trida"];
        $detail_rastru_rychlost[$trida_id]=$detail_rastru["rychlost"];             
         if ($trida_id=='1') $zaznam_b=$detail_rastru_trida[$trida_id];
        
        $zaznam_b=$detail_rastru_trida[$trida_id];          
       
        @$vysledek_cojevrastru_kontrola=mysql_query('select * from catalog_item_rastr_item where id='.$full_prijem.'', $GLOBALS["link"]);     
         while ($zaznam_rastr_kontrola=MySQL_Fetch_Array($vysledek_cojevrastru_kontrola)) 
        {
         if (!$zaznam_rastr_kontrola[$trida_id]) $zaznam_a=1;  else  $zaznam_a=0;                     
         if ($zaznam_rastr_kontrola[$trida_id] && $detail_rastru_rychlost[$trida_id]=='80') $vysledek_80[]= $zaznam_rastr_kontrola[$trida_id];
         if ($zaznam_rastr_kontrola[$trida_id] && $detail_rastru_rychlost[$trida_id]=='90') $vysledek_90[]= $zaznam_rastr_kontrola[$trida_id];
         if ($zaznam_rastr_kontrola[$trida_id] && $detail_rastru_rychlost[$trida_id]=='S') $vysledek_S[]= $zaznam_rastr_kontrola[$trida_id]; 
         if ($zaznam_rastr_kontrola[$trida_id] && $detail_rastru_rychlost[$trida_id]=='SS') $vysledek_SS[]= $zaznam_rastr_kontrola[$trida_id];        
        }   
         if ($trida_id=='1' && $zaznam_a==1) echo '<td>'.$zaznam_b.'</td>';
         if ($i5=='5' && $zaznam_a==1) echo '<td>'.$zaznam_b.'</td>';  
         if ($i5=='5') {$i5='0';} 
           
      $i5++;
    endwhile;
       
        echo '</tr><tr id="tr_data">';
                
        if (!empty ($vysledek_80)) { 
        echo '<td>80</td>';
        for ($p = 0; $p < count($vysledek_80); ++$p) echo  '<td>'.$vysledek_80[$p].'</td>';
        echo '</tr><tr id="tr_data">';
       }
       if (!empty ($vysledek_90)) { 
        echo '<td>90</td>';
        for ($p = 0; $p < count($vysledek_90); ++$p) echo  '<td>'.$vysledek_90[$p].'</td>';
        echo '</tr><tr id="tr_data">';
       }        
        if (!empty ($vysledek_S)) { 
        echo '<td>S</td>';
        for ($p = 0; $p < count($vysledek_S); ++$p) echo  '<td>'.$vysledek_S[$p].'</td>';
        echo '</tr><tr id="tr_data">';
       }
       if (!empty ($vysledek_SS)) { 
        echo '<td>SS</td>';
        for ($p = 0; $p < count($vysledek_SS); ++$p) echo  '<td>'.$vysledek_SS[$p].'</td>';
        echo '</tr><tr>';
       }
        
        echo '</tr></table></div>';   

vím, že je kód napsán velmi chaoticky, ale zkouším co se dá a nedokážu přinutit data vypisovat se jak potřebuji.

jedná se o to, že načítám první řádek jedné tabulky db "písmena" a ostatní data z druhé tj. čísla
první řádek jsou písmena abecedy označují různá zatížení při jednotlivých rychlostech, které se udávají na začátku každého dalšího řádku hodnot..

problém je v tom, že se hlavička TABULKY V html nevypisuje podle údajů z druhé tabulky. Cyklus má zajistit to, že nalezne pod nějakým písmenem nějakou hodnotu a když ne nevypíše se písmeno vůbec a to nefunguje. Vypisuje to jak chce (((

Nevěděl by někdo jak na to
Tori
Profil
Jakou máte strukturu tabulek? Vypadá to jako varianta této chyby, když z jedné tabulky načtete hodnoty a v druhé je používáte jako název sloupce. SQL dotaz na ř.10 může vracet více řádků výsledků, nebo jen jeden (z kódu mi to není jasné)?
Cyklus má zajistit to, že nalezne pod nějakým písmenem nějakou hodnotu a když ne nevypíše se písmeno vůbec
Neměla by potom podmínka (anebo přiřazení hodnot) na ř.13 být opačně?

Třeba by šlo na ř.14-17 nepoužívat automatické číslování indexů pole, ale jako index použít $trida_id. Zároveň byste si někde ukládal, která ID z první tabulky se mají zobrazit v hlavičce HTML tabulky. A zobrazení tabulky by bylo až za oběma cykly - nejdřív ta ID pro hlavičku tabulky, a pak byste měl třeba něco jako:
if (!empty ($vysledek_80)) { 
    echo '<td>80</td>';
    foreach ($pismena as $pismeno) { 
        if (isset($vysledek_80[$pismeno])
            echo '<td>'.$vysledek_80[$pismeno].'</td>';
        else 
            echo '<td>&nbsp;</td>';
    }
    echo '</tr><tr id="tr_data">';
}
A potom by to šlo ještě dál zjednodušit, abyste neměl 4 různá pole pro jednotlivé rychlosti, ale jen jedno vícerozměrné pole, kde bude jako klíč nejdřív rychlost, pak ID: $vysledek['80'][$trida_id] = $zaznam_rastr_kontrola[$trida_id];.

Drobnosti: podmínka na ř.6 je zbytečná, když na ř.8 je tentýž příkaz bez podmínky. Počítání každého pátého řádku se obvykle řeší operátorem modulo (= zbytek po celočíselném dělení).

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: