Alla olevassa koodissa haetaan taulusta ne rivit, joissa on yksi ja sama käyttäjätunnus. Se onnistuu, sen huomaan siitä että echo -käsky tulostaa tässä tapauksessa kaikki löytyneet 10 riviä. Mutta DELETE ei toimi. Olen vääntänyt sitä jo vaikka mihin muotoon, mutta ei. Mikä on pielessä?
Koodinpätkä on tämännäköinen:
<?php $cid = $user['id']; $tulos = mysql_query("SELECT group_id FROM groups WHERE company_id = '$cid'", $lnk) or die("Kysely ei onnistunut: ". mysql_error()); while($tulosrivi = mysql_fetch_array($tulos)){ echo "<b>".$tulosrivi['group_id']."</b> <br />"; $sql = mysql_query("DELETE FROM groups WHERE company_id = '$company_id'", $lnk); } if(!$sql || mysql_affected_rows($lnk) < 1) echo "SQL-lauseessa virhe.<br />\n"; else echo "Tuotetietojen poisto onnistui.<br />"; ?>
(Mod. Edit. Kooditagit.)
Ensimmäisessä kyselyssä tieto haetaan muuttujasta $cid, toisessa muuttujasta $company_id - olisiko vika siinä? Huomaa myös, että funktiota mysql_query kutsutaan toisen kerran while-silmukan sisällä, joten poistoa saatetaan yrittää lukuisia kertoja.
Kiitokset!
Vaihdoin '$company_id':n tuossa DELETE -lauseessa '$cid':iksi, ja onnistui.
While-silmukan sisällä delete on siksi että halutaan poistaa niin monta riviä kuin on löytynyt.
Toi "DELETE FROM groups WHERE company_id = '$cid'" poistaa yhdellä kyselyllä kaikki ryhmät, jotka vastaavalla SELECT-lauseella löytyy. Jos tuossa olisi jotain tarkistuksia ja delete-lauseessa "WHERE group_id = '$group_id'" niin tuon voisi ymmärtää, mutta nyt tuo näyttää kummalta, kun yritetään uudestaan poistaa jo poistetuja tietoja .
Aihe on jo aika vanha, joten et voi enää vastata siihen.