MYSQL - WHERE Abfrage funktioniert fehlerhaft?

  • Hallo an das Forum,

    ich bin Einsteiger im Bereich PHP / MySql und stecke gerade in einer rein theoretisch einfachen Abfrage fest.

    Und zwar möchte ich gerne aus einer Datenbank zeilenweise lesen, dabei jedoch nur die Zeilen herausnehmen, die der Bedingung `Endzeit` <= $heute entsprechen. Klingt einfach, funktioniert komischerweise auch teilweise.

    Hier mal der Code:

    PHP
    abfrage0 = "SELECT `KreditID` , `KreditgeberID` , `KreditnehmerID` , `Endsumme` , `Endzeit` FROM `kredite` WHERE `Endzeit` <= '$heute'";
    $inhalt0 = mysql_query($abfrage0) or die ('Abfragefehler');
    while ($row = mysql_fetch_array($inhalt0))
    { 
       [...] 
    }

    Zur Erklärung: Es sollen schon beim Lesen (aus Performancegründen) nur die Zeilen genommen werden, die abgelaufen sind (es geht um Kredite, die jetzt zurückgezahlt werden müssen). Dabei stellt $heute genauso wie $Endzeit eine Zahl in Stunden dar, mit Kommastellen. $heute wird vor der Abfrage definiert und $Endzeit eben aus der Tabelle gelesen bzw für die Bedingung genutzt.

    Das merkwürdige dabei ist folgendes:
    Bei einem ungefähren Wert von $heute = 17844044.0447 und einem Wert $Endzeit = 16844044.0447 (lediglich die zweite Stelle verringert)funktioniert die Abfrage, die Zeile wird gelesen. Bei $Endzeit = 1.xxxx der gleiche Erfolg. Doch lösche ich einfach die ersten beiden Stellen zu $Endzeit = 844044.0447, so erscheint der Fehler, nämlich dass die Zeile nicht ausgelesen wird.

    Mein Problem ist also, wieso die WHERE Abfrage da teilweise fehlerhaft ist, obwohl die Rechen-Prüf-Anweisung ja stimmt und bei kleineren Zahlen als $heute durchaus funktioniert, nur halt lange nicht bei allen.

    Ich hoffe, man kann mir hier weiterhelfen, Google und Forum hab ich teils benutzt, aber ich habe nichts gefunden und auch keine Ahnung, nach was ich da genau suchen müsste, um ein solches kurioses Problem zu erkennen.

    Gruß, FraXXor

  • Was für ein Datentyp ist Endzeit? Und schreibe:

    PHP
    $inhalt0 = mysql_query($abfrage0) or die ('MySQL-Fehler: ' . mysql_error());
  • Also ich habe die Variable als varchar(32) definiert. Das Problem ist mir selber schon in den Sinn gekommen, dass es vielleicht nicht als Zahl erkannt wird, da ja aber andere Zahlen funktionieren, würde ich diese Ursache ausschließen, oder überseh ich da etwas?

    die Fehlermeldung kann ich überarbeiten, sollte aber sowieso nicht angezeigt werden, da die Datenbank ansonsten fehlerfrei gelesen wird.

  • Du willst Zahlen vergleichen, da kannst du kein Datentypen Varchar benutzen! Soriere mal Texte, die die "Zahlen" 1 bis 10 enthalten, dann bekommst du:

    1
    10
    2
    3
    4
    5
    6
    7
    8
    9

  • ah, das is tatsächlich der Fehler, wie einfach an sich.

    Ich danke vielmals, habe jetzt DECIMAL benutzt und es klappt einwandfrei.

    Gruß, Fraxxor