Frage zu PHP-Script. Mysql-del in Schleife

Bash, Shell, PHP, Python, Perl, CGI
neo110
Posts: 6
Joined: 2004-02-12 16:53

Frage zu PHP-Script. Mysql-del in Schleife

Post by neo110 » 2005-05-18 14:46

Moin Moin aus dem hohen Norden :) (gut, ganz so hoch isser nicht, trotzdem liegen wir am Busen der Nation => Jadebusen *g*)

Zu meiner Frage:
Ich habe ein PHP-Script programmiert, welches per (while-)Schleife Daten aus einer Mysql-Tabelle ausgibt.
Die Tabelle verfügt über den Content sowie über ein Start- und Enddatum.

Nun lasse ich in der Schleife überprüfen, ob das heutige Datum >= Enddatum ist, wenn ja, dann kommt der Delete-Befehl, wenn nein, dann läuft er durch.

Mein Problem an der Sache ist nun folgende:
Findet das Script ein Enddatum, welches überschritten worden ist, so wird der Delete-Befehl auch ausgeführt, allerdings bricht die Schleife dann ab und was folgt ist für jedem klar, eine Fehlermeldung.

Meine Frage: Gibt es eine bessere Art und Weise das zu realisieren? Ich möchte gern, das keine Fehlermeldung erscheint und das Script ohne Mucken durchläuft.

Momentan ist es wie folgt programmiert:

Code: Select all

$result = mysql_query("SELECT * from herzen");
while ($herz = mysql_fetch_array($result))
{
$jetzt=time();
$bis=$herz[ende];
$rest=$bis-$jetzt;
$restabzug=86400*$resttage;
$rest=$rest-$restabzug;
if ($rest <= "0") {
$result = mysql_query("delete from herzen where herzen.ende = '$bis'");
echo $herz[von]." - ".$herz[an];
}
}
Danke,

Jens

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: Frage zu PHP-Script. Mysql-del in Schleife

Post by outofbound » 2005-05-18 17:36

Grüsse vom Arsch der Welt... ;)
Ich habe ein PHP-Script programmiert, welches per (while-)Schleife Daten aus einer Mysql-Tabelle ausgibt.
Die Tabelle verfügt über den Content sowie über ein Start- und Enddatum.
Ok, das heisst kein Satz kann eindeutig referenziert werden, das löschen eines "einzelnen" Datensatzes ist damit nicht möglich, wenn beide identisch sind. Man kann dann nur beide
zusammen löschen. Aber ok. ;)
Nun lasse ich in der Schleife überprüfen, ob das heutige Datum >= Enddatum ist, wenn ja, dann kommt der Delete-Befehl, wenn nein, dann läuft er durch.
Ok, das heisst konkret: Du willst alle Datensätze, deren Enddatum "vorbei" ist löschen.
Findet das Script ein Enddatum, welches überschritten worden ist, so wird der Delete-Befehl auch ausgeführt, allerdings bricht die Schleife dann ab und was folgt ist für jedem klar, eine Fehlermeldung.
Ok, was für eine Fehlermeldung?

Meine Frage: Gibt es eine bessere Art und Weise das zu realisieren? Ich möchte gern, das keine Fehlermeldung erscheint und das Script ohne Mucken durchläuft.

Code: Select all

$result = mysql_query("SELECT * from herzen");
while ($herz = mysql_fetch_array($result))
{
$jetzt=time();
$bis=$herz[ende];
$rest=$bis-$jetzt;
$restabzug=86400*$resttage;
$rest=$rest-$restabzug;
if ($rest <= "0") {
$result = mysql_query("delete from herzen where herzen.ende = '$bis'");
echo $herz[von]." - ".$herz[an];
}
}
Wie wärs hiermit:

Code: Select all

-pseudocode- delete from herzen where ende < now(). -/pseudocode-
Keine Schleifen, kein Stress, keine Fehlermeldung....

Die ganzen Probleme, Fehler und Unsicherheiten, die in deinem Beispielcode vorhanden sind, möchte ich jetzt nicht weiter erörtern, aber: Ganzganzganz schlechter Programmierstil, vor allem der "delete" query macht was ganz anderes, als du wahrscheinlich denkst. ;)

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: Frage zu PHP-Script. Mysql-del in Schleife

Post by flo » 2005-05-18 19:07

Neo110 wrote: Meine Frage: Gibt es eine bessere Art und Weise das zu realisieren? Ich möchte gern, das keine Fehlermeldung erscheint und das Script ohne Mucken durchläuft.
Ja ... alles, was die Datenbank kann, sollte diese auch tun ... Im Extremfall und bei großen Tabellen knallst Du Dir mit so einem Mist unnötige Last auf den Webserver. Dem Datenbankserver macht das keinen großen Unterschied, ob er die gefundenen Datensätze löscht oder ausgibt.

In jeder MySQL-Beschreibung steht Löschen mit Bedingung wahrscheinlich schon im ersten Kapitel nach der Einleitung.

Grüße,

flo.

preacher
Posts: 24
Joined: 2003-12-10 18:57

$result nicht ueberschreiben

Post by preacher » 2005-05-19 16:56

abgesehen davon das die loesung nicht die klügste ist, würde es wahrscheinliche reichen, dass das ergebnis des delete-befehls nicht in $result gespeichert wird. nenn' es einfach $result2 ;-)
grund sollte klar sein....