Autor Zpráva
PeterII
Profil *
Zdravím, mažu data z nabídky to mi funguje. Nýbrž nyní chci mazat, když smažu nabídku, aby se smazaly z databáze i všechny obrázky, který odpovídají id_nabidky. Řeším to nějak takto, bohužel neúspěšně. Vypíšeto pouze DELETE FROM obrazky WHERE id IN () - hodnoty ID to nedoplní, nevíte někdo proč?
if (isset($_GET["delete"])){
$sql_smaz = MySQL_Query("SELECT * FROM obrazky WHERE id_nabidky = ".$_GET['delete']." ");
 while ($row_smaz = MySQL_Fetch_Array($sql_smaz)) {
//$del = MySQL_Query("DELETE FROM nabidka WHERE id = ".$_GET['delete']." LIMIT 1 ");
$del_l ="DELETE FROM obrazky WHERE id IN (".implode(',', $row_smaz['id']).") ";
echo"$del_l";
}
if (!$del_l){
echo"Chyba";
} else {
echo"SMazáno";     
}
}
Tori
Profil
PeterII:
implode se používá na spojení prvků pole do jednoho řetězce. Předáváte mu ale číselný řetězec (to ID), výsledkem bude NULL.
Uvnitř toho cyklu si jen poskládejte řetězec složený z těch ID oddělených čárkami ("1,2,3,4,"), pak z něj za cyklem ořízněte přebytečnou čárku, a vložte do SQL pro smazání těch obrázků. (mazání se tedy provede jen jednou, ne opakovaně pro každé ID jako máte teď)
PeterII
Profil *
vyřešil sjem to takto:

while ($row_smaz = MySQL_Fetch_Array($sql_smaz)) {
//$del = MySQL_Query("DELETE FROM nabidka WHERE id = ".$_GET['delete']." LIMIT 1 ");
$del_l = "DELETE FROM obrazky WHERE id = ".$row_smaz['id']."";
    $ret = mysql_query($del_l);
}

je to vhodné řešení?
Tori
Profil
Je funkční. Jen provedete (počet mazaných záznamů) + 1 SQL dotazů, kdežto s řešením podle [#2] byste provedl vždy právě dva. Při malém počtu mazaných záznamů to vyjde víceméně nastejno, při větším počtu to bude pomalejší. Takže kdyby se vám někdy zdálo, že ten skript běží pomalu, tak první místo pro optimalizaci bude tohle.

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