php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.10.2011, 11:20  
Neuer Benutzer
 
Registriert seit: 19.03.2010
Beiträge: 13
PHP-Kenntnisse:
Anfänger
netzzwerg befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] while-Abfrage optimieren? Script lädt ewig.

Hallo,
kurz zu dem Sachverhalt:
Ich habe eine Datenbank, in der sind Links enthalten, die mit einem Ablaufdatum versehen sind.
Ich habe insgesamt (zum Test) 10 Links in der Datenbank.

Das Ablaufdatum ist in dem Format tt.mm.yyyy gespeichert.

So, nun habe ich mir folgenden Code zusammengebastelt, der in einer while-Schleife den Linkstatus von aktiv zu abgelaufen ändern soll.

PHP-Code:
<?php
$timestamp 
time();
$datum date("d.m.Y"$timestamp);

$verbindung mysql_connect ("localhost",
"xx""xx")
or die (
"keine Verbindung möglich.
 Benutzername oder Passwort sind falsch"
);

mysql_select_db("xx")
or die (
"Die Datenbank existiert nicht.");

$abfrage mysql_query("SELECT link_id, link_status, link_datum FROM links WHERE link_status = 'aktiv'");
$ergebnis mysql_fetch_array($abfrage);
$lid $ergebnis['link_id'];

while (
$datum > ($ergebnis['link_datum']))

mysql_query("UPDATE links SET link_status = 'abgelaufen' WHERE link_id = '$lid'");
}
?>
Das Script ermittelt am Anfang das aktuelle Datum und speichert es in der Variable $datum.

Dieses vergleiche ich dann mit dem Ablaufdatum des Links und setze, sofern das aktuelle Datum größer ist als das Ablaufdatum, den Linkstatus auf "abgelaufen".

Meine Frage nun: Ist diese Abfrage ordentlich geschrieben oder gibt es Optimierungsbedarf.
Das Sript funktioniert, aber es hört erstaunlicherweise nicht auf zu laden und ich habe Sorge, dass wenn eines Tages mehrere hundert Links in der DB sind, ich den MySQL-Server ungewollt zum Absturz bringe.

Wäre toll, wenn da mal jemand raufschaut, ich habe wirklich versucht mir mit Tutorials etc. den Code zusammenzustellen und habe nicht irgendwo copy/paste genutzt.

Danke und Grüße
netzzwerg ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.10.2011, 11:24  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

HI.

Gibt Optimierungsbedarf! Mach doch alles mit einem SQL Statement und nutze die "Datums-Möglichkeiten" von SQL (ohne While Schleife). Schau mal hier:

http://www.itrain.de/knowhow/sql/tsql/datum/
http://www.w3schools.com/sql/sql_dates.asp

mfg wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 19.10.2011, 11:28  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Sowas macht man nicht in einer while-Schleife sondern mit einem einzigen UPDATE-Query

Code:
UPDATE links SET link_status = 'abgelaufen' WHERE link_status = 'aktiv' AND datum < NOW()
Vorausgesetzt der Spaltentyp von 'datum' ist DATE oder DATETIME. Wenn nicht, bietet MySQL entsprechende Umformungs-Funktionen, besser wäre es allerdings dann den Spaltentyp zu ändern, da es keinen Sinn macht, ein Datum als String zu speichern.
fab ist gerade online   Mit Zitat antworten
Alt 19.10.2011, 11:34  
Neuer Benutzer
 
Registriert seit: 19.03.2010
Beiträge: 13
PHP-Kenntnisse:
Anfänger
netzzwerg befindet sich auf einem aufstrebenden Ast
Standard

Ich danke schonmal für die Antworten und lese mir die Links gleich an.

Ja, das mit dem Datum als String speichern ist wohl das Problem an der Sache.

Ich habe das einfach zweckmäßig so gemacht, weil der User selbst eingibt, wann der Link abläuft und da schien es mir am sinnvollsten, das ganze einfach als String abzuspeichern

++++
EDIT:

Danke, habe den Query von fab mithilfe von wolf29's Links angepasst. Nun funktioniert es. Vielen Dank nochmal an euch zwei. Wieder was neues gelernt, frei nach dem Motto: warum kompliziert, wenns auch einfach geht.

Geändert von netzzwerg (19.10.2011 um 11:49 Uhr). Grund: Problem gelöst
netzzwerg ist offline   Mit Zitat antworten
Alt 19.10.2011, 11:52  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Wenn du dabei aber schon ein festes Format vorgibst, bist du nur noch einen kleinen Schritt vom DATE-Format in MySQL entfernt (YYYY-MM-DD).

Allerdings ist die Methode alles andere als benutzerfreundlich und somit auch recht fehleranfällig. Ein Tipp: Benutze bei der Eingabe entweder einzelne Textfelder für Jahr, Monat und Tag und setze das Datum mit mktime zusammen oder lass dem User freie Hand, parse das Datum aber mit strtotime so dass beliebige Formate erkannt werden (Aber Vorsicht, nicht alle Eingaben sind eindeutig - also besser vor dem Abspeichern nachfragen ob das Datum richtig erkannt wurde)
fab ist gerade online   Mit Zitat antworten
Alt 19.10.2011, 21:25  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von netzzwerg Beitrag anzeigen
So, nun habe ich mir folgenden Code zusammengebastelt, der in einer while-Schleife den Linkstatus von aktiv zu abgelaufen ändern soll.

PHP-Code:
$abfrage mysql_query("SELECT link_id, link_status, link_datum FROM links WHERE link_status = 'aktiv'");
$ergebnis mysql_fetch_array($abfrage);
$lid $ergebnis['link_id'];

while (
$datum > ($ergebnis['link_datum']))

mysql_query("UPDATE links SET link_status = 'abgelaufen' WHERE link_id = '$lid'");

Klassische Endlosschleife... weder $ergebnis noch $datum ändern sich in der Schleife, also tritt immer wieder das gleiche Ergebnis ein.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SQL Abfrage optimieren tromton Datenbanken 11 01.08.2011 20:42
Script Optimieren fabi288 PHP Einsteiger 11 22.07.2011 09:56
Abfrage optimieren. Wie Indizes erstellen. Single Datenbanken 12 03.05.2011 19:41
[Erledigt] 3x join dauert ewig, kann man das optimieren? Haxley Datenbanken 9 20.02.2011 02:09
Premature end of script headers: index.php im Zusammenhang mit Performanceverlust Asipak Server, Hosting und Workstations 10 29.10.2010 14:13
Server abfrage optimieren spamerix Scriptbörse 9 12.08.2010 17:07
Mehrere Werte in einem script verarbeiten ernich PHP Tipps 2010 7 09.04.2010 20:24
SQL Abfrage geht in MYSQL Console aber nicht im php Script NeroS PHP Tipps 2009 2 24.12.2009 10:02
[Erledigt] MySQL Abfrage optimieren stefan a PHP Tipps 2009 2 01.02.2009 11:52
dienste abfrage - shoutcast frei? script Snape PHP Tipps 2008 10 22.09.2008 11:54
Script zur Abfrage von Position und Backlinks programmieren Malfunction Beitragsarchiv 0 07.09.2005 13:30
[Erledigt] Verzögerung durch included Script? Umgehen? PHP Tipps 2005-2 4 10.07.2005 19:26
PHP Script abfrage geht beim neuen Server nicht mehr PHP Tipps 2005-2 13 19.06.2005 17:39
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00
Script bricht mitten in einer while Schleife ab PHP Tipps 2004 5 11.07.2004 17:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql optimierung while schleife

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:14 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum