Merkwürdiges MySQL Ergebnis
Chevalier
- datenbank
Hallo zusammen,
ich habe folgendes Problem:
SELECT count(*) FROM tabelle WHERE ( feld = 0 ) ;
SELECT count(*) FROM tabelle WHERE ( feld = '0' ) ;
Nach meinem Verständnis sollten beide Abfragen das gleiche Ergebnis erzeugen. Doch bei der ersten Abfrage erhalte ich den richtigen Wert (ca. 6000) und bei der zweiten Abfrage erhalte ich als Ergebnis 1.
Wieso bekomme ich ein anderes Ergebnis, wenn ich die 0 in Hochkommatas setze?
Habe es auf MySQL 4, als auch auf MySQL 5 probiert.
SELECT count(*) FROM tabelle WHERE ( feld = 0 ) ;
SELECT count(*) FROM tabelle WHERE ( feld = '0' ) ;Nach meinem Verständnis sollten beide Abfragen das gleiche Ergebnis erzeugen.
Nach meinem Verständnis sind das total unterschiedliche Abfragen mit demnach zurecht unterschiedlichen Ergebnissen.
Nach meinem Verständnis sind das total unterschiedliche Abfragen mit demnach zurecht unterschiedlichen Ergebnissen.
Worin liegt denn deiner Meinung nach der Unterschied? Wie kommt es zu den unterschiedlichen Ergebnissen? Was ermittelt die eine und was die andere Abfrage?
Was mich interessieren würde:
Wenn das verschiedene Abfragen sind, wie kommt es bei dem zweiten zum Ergebniss 1?
Was für einen Datentyp hat in MySQL das "feld"? Was bekommst du bei folgenden Abfragen:
SELECT * FROM tabelle WHERE ( feld = 0 ) ;
SELECT * FROM tabelle WHERE ( feld = '0' ) ;
Werden hier auch 6000 bzw. 1 Datensätze geliefert?
Siehst du einen Unterschied im Wert von "feld" bei dem einen Datensatz, der mit Hochkommatas gefunden wird, zu den anderen 6000?
Sorry, dass ich nur Fragen habe.
Gruss
Shenga
Das Feld ist ein int(1).
Merkwürdig ist folgendes:
Bei den Abfragen
komme ich zu folgendem Ergebnis:
bei 1) zeigt mir phpMyAdmin:
Zeige Datensätze 0 - 0 (1 insgesamt, die Abfrage dauerte 1.6297 sek)
bei 2) bekomme ich ebenfalls:
Zeige Datensätze 0 - 0 (1 insgesamt, die Abfrage dauerte 1.6297 sek)
nur, dass bei 2) trotzdem eine Tabelle mit 6000 Datensätzen ausgegeben wird, obwohl oben steht, dass nur ein Datensatz gefunden wurde. Ich würde mal fast auf einen Bug tippen.
nur, dass bei 2) trotzdem eine Tabelle mit 6000 Datensätzen ausgegeben wird, obwohl oben steht, dass nur ein Datensatz gefunden wurde. Ich würde mal fast auf einen Bug tippen.
Da es sich um eine banale, täglich zigtausendfach durchgeführte Anweisung handelt, ist wohl ein Systemfehler auszuschliessen.
Da es sich um eine banale, täglich zigtausendfach durchgeführte Anweisung handelt, ist wohl ein Systemfehler auszuschliessen.
Wenn nicht zufällig jemand _beide_ Möglichkeiten ausprobiert und sieht, dass unterschiedliche Ergebnisse herauskommen, fällt das ja auch nicht ins Auge. Die Frage ist ja, was es sonst sein könnte.
Hallo Chevalier,
Die Frage ist ja, was es sonst sein könnte.
vielleicht ein weiteres Zeichen in dem Feld in der DB z.B. ein Leerzeichen vor oder hinter der 0. Bei char-Feldern ist das gut vorstellbar.
Gruß Mia
Bei char-Feldern ist das gut vorstellbar.
Wie gesagt:
Es ist ein Integer Feld --> int(1)
nur, dass bei 2) trotzdem eine Tabelle mit 6000 Datensätzen ausgegeben wird, obwohl oben steht, dass nur ein Datensatz gefunden wurde. Ich würde mal fast auf einen Bug tippen.
Das Query-Tool könnte so eingestellt sein, dass es nur einen Datesatz aus einer beliebig grossen Datensatzmenge ausgibt. (Wobei die Obergrenze etwas niedrig scheint, bspw. 1.000 Datensätze wäre "normal".)
yo,
Wenn das verschiedene Abfragen sind, wie kommt es bei dem zweiten zum Ergebniss 1?
weil beiden eine aggregatfunktion benutzen COUNT(), sprich beide abfragen liefern nur EINEN datensatz zurück. er hat einach den inhalt des einen datensatzes vermischt mit der anzahl der datensätze.
noch mal, bei beiden abfragen mit dem count wird nur ein datensatz als ergebnis rauskommen. der erste hat den -> Inhalt <- 6000 und der zweite den inhalt 0.
Ilja
SELECT count(*) FROM tabelle WHERE ( feld = 0 ) ;
SELECT count(*) FROM tabelle WHERE ( feld = '0' ) ;
beim ersten ist 0 ein integer und beim zweiten ein string
beim ersten ist 0 ein integer und beim zweiten ein string
Richtig.