MySQL Datenbank mit PHP auslesen

Anfänger2011

Bekanntes Mitglied
Hallo und ein FROHES NEUES JAHR EUCH ALLEN,

Ich habe ein kleines Problem beim auslesen bestimmter Einträger in einer DB.

Aufbau:
-id
-date
-time
-content

Mein Ziel ist es alle Einträge von Samstag 11:54:59 bis Samstag 11:55:00 der vorherigen Woche zu erhalten.

Mein Ansatz:
PHP:
 $date = $row_main ['date'];
         $wd = date("w", strtotime($date));

          if($wd == "6"){
                $counter = 0;
                $lastSaturday = date("Y-m-d", strtotime($date . " -1 week"));
                $sql = "SELECT * FROM operations WHERE date<='$date' AND date>='$lastSaturday' ORDER BY id DESC";
                $query = mysql_query($sql) or die(mysql_error());

                while($row = mysql_fetch_assoc($query)){
                     $counter++;
                }
           }

Vielen DANK schon mal im voraus ;)
 

Dukel

Top Contributor
Jetzt fehlt nur noch, dass du das Problem benennst. Kommen gar keine Ergebnisse? Kommen die falschen? Kommen zu wenig oder zu viele Einträge?
Funktioniert der SQL Befehl, wenn du den manuell mit den entsprechenden Werten ausführst?
 

Anfänger2011

Bekanntes Mitglied
Ich weiß nicht genau wie ich das einbinden der Zeit umsetzen soll. Sprich die Umsetzung der oben genannten Bedingung in Quellcode.

Zeit und Datum müssen ja denke ich irgendwie verschaltet werden, da sonst nur Einträge zwischen 11:54:59 und 11:55:00 angezeigt werden würden.
 

redJava99

Bekanntes Mitglied
Du musst dann explizit das Datum auf den Grenzfall prüfen.
Code:
        SELECT * FROM operations
        WHERE
            (date<'$date'
            OR
            date='$date' AND time<'11:55:00')
        AND
            (date>'$lastSaturday'
            OR
            date='$lastSaturday' AND time>='11:55:00')
        ORDER BY id DESC
Klammern nicht vergessen (AND hat eine höhere Präzedenz als OR).
Statt getrennter Spalten für Date & Time könntest du auch eine DATETIME-Spalte verwenden, damit wäre die Abfrage einfacher.
 

Tobse

Top Contributor
Ich würde zwei SQL-formatierte DateTimes für den Start- und Endbereich der Abfrage erstellen: $start und $end. Die kannst du dann mit BETWEEN einfach benutzen:

PHP:
$query = "SELECT ... FROM ... WHERE CONCAT(date, ' ', time) BETWEEN $start AND $end";

P.S.: noch ein paar PHP-seitige Tipps.

1. Benutze den PDO treiber und prepared statements, die mysqli_* funktionen sind deprecated. Beispiel:
PHP:
$stmt = $pdo->prepareStatement("SELECT ... FROM ... WHERE CONCAT(date, ' ', time) BETWEEN :start AND :end");
$stmt->bindValue("start", $start);
$stmt->bindValue("end", $end);
$result = $stmt->execute();

2. NIE SELECT *, siehe: http://www.php-faq.de/q-sql-select.html

3. Es sieht so aus, als wolltest du nur die Anzahl an Zeilen ermitteln. Sich von der DB alle zeilen her senden zu lassen, nur im sie zu zählen, kostet viel Performance (je nach Menge der Daten). Benutze die SQL COUNT funktion.
 

Ähnliche Java Themen

Neue Themen


Oben