Autor Zpráva
andynewcastleth
Profil
Mám například tabulku zamestnanci (obsahující 1000 záznamů).

A například skrz ID provázanou tabulku zapisy (kam zapisuji zaměstnanecké příchody/odchody/přestávky/obědy) (obsahující 2 000 000 záznamů).

A nyní chci pročistit ze zapisy všechny řádky, které nemají existujícího zaměstnance.
Kajman
Profil
Dokážete vypsat přes select takové záznamy, které se mají mazat? Ke smazání je pak už jen kousek.

Kdybyste to měl provázané přes cizí klíč, je možné to mazat hned.

Ale mazat zaměstance nedává moc smysl. Spíš se jim v db jen upraví konec pracovního poměru.
andynewcastleth
Profil
To co potřebuji, by jsem sám napsal takto, ale problém bude, že zapisy maji 2 000 000 záznamů a zamestnanci 1000.

Je to příklad, ve skutečnosti neřeším zaměstnance, jen potřebuji ty data čistit.

    $result = mysqli_query($dblink, "SELECT * FROM zapisy");
    while ($row = mysqli_fetch_assoc($result)) {
               $idZapisu = $row["id"];
               $idReference = $row["id_reference"];
               $results = $mysqli->query("SELECT id from zamestnanci WHERE id='$idReference'");
               $testing=mysqli_num_rows($results);
                if($testing != 1){
                      mysqli_query($dblink,"DELETE FROM zapisy WHERE id='$idZapisu'");
                }
    }
Kajman
Profil
Když chcete dělat něco s databázemi, tak si o nich něco přečtěte! Tahle splácanina je hrozná.

Pokud toto vypíše záznamy, které chcete mazat
SELECT z.*
FROM   zapisy
WHERE  z.id_reference NOT IN (SELECT id
                              FROM   zamestnanci)
tak ke smazání stačí první řádek změnit na DELETE.

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