Datensätz werden zu spät gelöscht
Andy A.
- datenbank
Hi,
ich habe folgende schleife:
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
while($row = mysql_fetch_array($result)){
$tid=$row['T_id'];
// Verarbeitung
$resultd = mysql_query("Delete FROM s_timer where T_id=$tid");
}
Nun sind bzw. 3 Datensätze mit der U_id=$userid in der Datenbank.
Allerdings wird die schleife manchmal 6mal ausgeführt.
Kann sein, dass MySQL den Datensatz erst zu spät löscht?
Oder hab ich da irgendeinen technischen Fehler.
Andy
Hallo Andy!
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
Hier schreib doch besser "SELECT T_id FROM", wenn Du nur T_id brauchst ;)
Nun sind bzw. 3 Datensätze mit der U_id=$userid in der Datenbank.
Allerdings wird die schleife manchmal 6mal ausgeführt.
Laß Dir doch erstmal das Ergebnis von $result ausgeben, und bau noch weitere Debug-Ausgaben rein, daß Du immer genau siehst, was MySQL Dir zurückgibt.
Kann sein, dass MySQL den Datensatz erst zu spät löscht?
Weiß ich nicht, aber ich kann es mir nicht vorstellen, und vor allem inwiefern "zu spät"?
Deine Lösch-Statements werden ja genau so oft ausgeführt, wie die erste Abfrage Ergebnisse hat.
MfG
Götz
Hallo Götz!
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
Hier schreib doch besser "SELECT T_id FROM", wenn Du nur T_id brauchst ;)
Ich brauch schon noch mehr, aber ich wollte hier nicht zuviel Code hier posten.
Nun sind bzw. 3 Datensätze mit der U_id=$userid in der Datenbank.
Allerdings wird die schleife manchmal 6mal ausgeführt.
Laß Dir doch erstmal das Ergebnis von $result ausgeben, und bau noch weitere Debug-Ausgaben rein, daß Du immer genau siehst, was MySQL Dir zurückgibt.
Kann sein, dass MySQL den Datensatz erst zu spät löscht?
Weiß ich nicht, aber ich kann es mir nicht vorstellen, und vor allem inwiefern "zu spät"?
Deine Lösch-Statements werden ja genau so oft ausgeführt, wie die erste Abfrage Ergebnisse hat.
Das hab ich mir eigentlich auch gedacht!
Aber warum wird die dann manchmal 6 mal ausgeführt, obwohl nur 3 Datensätze da sind?
Anwendung:
Wenn die Timer in einem kurzen Zeitabstand >1s sind gehts wunderbar, nur in dieser while Schleife nicht.
Andy
Hallo auch nochmal,
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
Hier schreib doch besser "SELECT T_id FROM", wenn Du nur T_id brauchst ;)
Ich brauch schon noch mehr, aber ich wollte hier nicht zuviel Code hier posten.
SELECT * macht man trotzdem nicht ;-)
Uli
hallo,
SELECT * macht man trotzdem nicht ;-)
warum nicht?
gruss
Hallo Eternius,
SELECT * macht man trotzdem nicht ;-)
warum nicht?
lies mal http://dclp-faq.de/q/q-sql-select.html
Grüße aus Nürnberg
Tobias
Hallo!
Ich brauche aber ALLE Spalten!!!
Warum darf ich das dann nicht machen?
Es wird sich auch an der Tabelle nichts ändern!
Außerdem war meine Frage anders gestellt!
Andy
Hallo Andy,
Ich brauche aber ALLE Spalten!!!
dann gebe alle Spalten an.
Es wird sich auch an der Tabelle nichts ändern!
vielleicht ändert sich in einem halben Jahr o.ä. doch mal was?
Außerdem war meine Frage anders gestellt!
ich habe ja auch nicht dir geantwortet, sondern Eternius :-)
Grüße aus Nürnberg
Tobias
Hi,
Hallo Andy!
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
Hier schreib doch besser "SELECT T_id FROM", wenn Du nur T_id brauchst ;)
noch besser:
SELECT DISTINCT T_id FROM - denn jede id wird ja nur einmal gebraucht.
Und statt der Schleife zum Löschen würde ich dann eher ein einziges
DELETE FROM s_timer WHERE T_id IN (...)
benutzen - vorher natürlich aus den einzelnen T_id einen kommagetrennten String machen und an die mit ... markierte Stelle einsetzen.
cu,
Andreas
Denkfehler....
»»$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
So wenn der USer 6 mal in der Datenbank war wird die Abfrage untendran auch 6 mal ausgeführt
$tid=$row['T_id'];
// Verarbeitung
$resultd = mysql_query("Delete FROM s_timer where T_id=$tid");
Da While kannste eliminieren, da sowieso bei dem einen Mal alle Datensätze gelöscht werden
Gruss Uli
Hi
Denkfehler....
Was für einer?
»»$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid");
So wenn der USer 6 mal in der Datenbank war wird die Abfrage untendran auch 6 mal ausgeführt
Schon klar! Aber er steht ja nur 3mal drin!
$tid=$row['T_id'];
// Verarbeitung
$resultd = mysql_query("Delete FROM s_timer where T_id=$tid");Da While kannste eliminieren, da sowieso bei dem einen Mal alle Datensätze gelöscht werden
Wieso? Ich muss doch immer einen Datensetz nach dem anderen abarbeiten.
Andy
Hallo Andy A.,
Da While kannste eliminieren, da sowieso bei dem einen Mal alle Datensätze gelöscht werden
Wieso? Ich muss doch immer einen Datensetz nach dem anderen abarbeiten.
Nein, musst Du nicht. Der Delete-Befehl löscht _alle_ Datensätze, auf die die Bedingung zutrifft.
Grüße
Andreas
Hi,
sobald ich das hier schreibe geht's!
$tid=0;
$result = mysql_query("SELECT * FROM s_timer WHERE U_id=$useid and T_id<>$tid");
^^^^^^^^^^^^^^^^
while($row = mysql_fetch_array($result)){
$tid=$row['T_id'];
// Verarbeitung
$resultd = mysql_query("Delete FROM s_timer where T_id=$tid");
}
Andy