Autor Zpráva
luma64
Profil
Pozdravujem ! Mám selekt nad tabuľkou import, z nej si načítam pre id z riadka hodnotu dodavico. Načítaným dodavico prechádzam tabulku dodavatel. Ak taký dodávateľ s dodavico neexistuje chcem ho vypísať. Ale pri každom riadku z tabuľky import sa dodavico z tabuľky dodavatel zobrazí ako existujúci, čo v mojom prípade nie je pravda. Kde pls robím chybu v cykle ? Ďakujem !

$stmt2 = $pdo->prepare("SELECT id, dodavico FROM import order by id");
$stmt2->execute();
if ($stmt2)
{
    echo "<table class = 'import'>";

    foreach ($stmt2 as $row2)
    {
    
        $dodavico = '';
        $id = $row2['id'];    
        $dodavico = $row2['dodavico'];
        

        $stmtdod = $pdo->prepare("SELECT id as id_dodavico FROM dodavatel where dodavico = :dodavico  and platny= 'A' and objmodul = '2' Limit 1");
        $stmtdod->bindValue(':dodavico', $dodavico);
        $stmtdod->execute();
        if ($stmtdod)
        {
            foreach ($stmtdod as $rowdod)
            {
                $id_dodavico = $rowdod['id_dodavico'];
                
            }
            

            if( $id_dodavico == null || !is_numeric( $id_dodavico ) || $id_dodavico == '' ) 
            {
                echo "<td style='width:2%'>No exist: id: $id  // dodavico: $id_dodavico</td>";
            }
            else
            {
                                
                echo "<td style='width:2%'>Exist: id: $id  // dodavico: $id_dodavico</td>";
            }    
        }
    }
}
Keeehi
Profil
Rychlá oprava je nastavit $id_dodavico = null; před tím foreachem.

Lepší by bylo se na ten foreach vykašlat (cyklus stejně nepotřebuješ když je maximálně jeden záznam) a tu podmínku předělat na to, aby se rozhodovala podle počtu záznamů.

Úplně nejlepší by bylo použít jen jeden dotaz a tu informaci o existenci/neexistenci záznamu v druhé tabulce si tam přes left join přidat. Výrazně to pomůže databázi jelikož jí pošleš sice složitější ale jen jeden dotaz oproti současnému stavu, kde je to 1 + N za každého dodavatele.

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