Mailinglisten-Archive |
Michael Wurz wrote: > nachdem ihr mir beim letzten Mal so hervorragend geholfen habt, bin ich guter Dinge, dass ihr auch diesmal eine gute Lösung parat habt. Ich habe mir einen kleinen Kalender in Php programmiert, in dem ich nun spezielle Tage farblich abheben möchte. > > Im Moment läuft es bei mir mit einer for($i=0, $i < 31, $i++) Schleife, in die ich eine Mysql Abfrage eingeliedert habe. > > SELECT timestamp FROM geburtstage WHERE user = '".$id."' AND timestamp BETWEEN '".$start_date."' AND '".$stop_date."' ORDER BY timestamp LIMIT 1; > $db_highlight = mysql_num_rows(mysql_query($sql,$dblink)); > > Im Prinzip möchte ich dort nur prüfen, ob der eingeloggte User Geburtstage zu einem bestimmten Datum hat, oder nicht. Inzwischen sind die eingetragenen Geburtstage in der Datenbank auf eine Zahl angewachsen, die die Abfragen von Tag zu Tag langsamer werden lassen. Kann ich irgendwas geschickter machen? ein Index in dieser Tabelle auf `user` existiert aber? wenn du eh für jeden Tag einzeln abfragst wieso benötigst du dann ein BETWEEN? du kannst doch auch direkt fragen `timestamp` = '" . $date . "' eventuell kannst du das timestamp noch mit den MySQL-Funktionen ins selbe Format bringen wie dein $date, bzw sollten halt beide im Format 'YYYY-MM-DD' sein > Kann ich zuerst ne Einmalige SQL Abfrage machen, die ich dann in der Schleife auslesen kann? Ich möchte vermeiden, dass bei jedem Aufruf des Kalenders erstmal 31 Queries losgeschickt werden müssen, bevor ich weiß was los ist. Freue mich auf eure Tipps! das wäre wohl am schnellsten WHERE CONCAT( YEAR(`timestamp`), MONTH(`timestamp`) ) = "' . $date . '" das dann in ein Array mit dem Datum als Schlüssel und dann jeden Tag das Array abgefragt anstelle jeden Tag ein Query. -- Sebastian Mendel www.sebastianmendel.de www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet
php::bar PHP Wiki - Listenarchive