PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Kann nicht zählen!


Gast
2004-04-11, 13:55:14
Ich habe ein Problem mit meinem Gästebuch. Jeder Eintrag hat eine fest zugewiesene ID. Die Einträge werden nach der ID sortiert und ausgegeben.
also zb. mysql_query("SELECT Eintrag,bla,bla FROM Guestbook ORDER BY 'ID' DESC LIMIT $i,$z")
while Schleife durchlaufe ich dann das ganze.
Das funktioniert auch bestens. Jetzt ist folgendes passiert. Der 100. Eintrag. Alle Einträge die größer sind als 99 werden auf einmal an den Anfang gesetzt und alles ist durch einander. Für MySql ist also 100 kleiner als 99.
Woran liegt das??? und wie kann man das beheben??

HellHorse
2004-04-11, 15:39:23
Doch, MySQL kann zählen. Und MySQL macht sogar, was man ihm sagt. In deinem Fall die Werte absteigend and id zu sortieren.
Falls falls du es lieber aufsteigen willst, nimm ASC statt DESC.

Talion
2004-04-11, 15:43:01
Hab auch erst gedacht er hätte einfach DESC statt ASC verwendet, aber das erklärt noch nicht, dass es erst ab dem 100. Eintrag eein Problem gibt. Versuch mal, die Tabelle einmalig zu sortieren: ALTER TABLE tabelle ORDER BY feld
Vielleicht ist einfach was durcheinander geraten. Merkwürdig wäre es trotzdem.

HellHorse
2004-04-11, 16:19:16
Irgendwie parktisch wäre eine genauere Beschreibung was passiert, d.h output und Parameter.
Mein Tipp sind eher fehlerhafte Parameter für LIMIT.

ALTER TABLE tabelle ORDER BY feld
Ein INSERT oder DELETE und die Tablle ist wieder durcheinander.

Talion
2004-04-11, 16:41:32
Limit kann natürlich auch gut sein.
Ich hatte aber selbst mal nen Fall wo SQL völlig unnachvollziehbare Ergebnisse (ebenfalls in Bezug auf die Reihenfolge) lieferte. Das war kurz nachdem mein Server für n paar Minuten nicht zu erreichen war. Ich nehme mal an, da wurde ein Befehl nicht vollständig ausgeführt oder was weiß ich, jedenfalls ging nach dem neu sortieren alles problemlos. Ist ja zum Glück nicht so, dass nach jedem Einfügen oder Löschen Chaos herrschen würde

zeckensack
2004-04-11, 17:11:00
Original geschrieben von Gast
Ich habe ein Problem mit meinem Gästebuch. Jeder Eintrag hat eine fest zugewiesene ID. Die Einträge werden nach der ID sortiert und ausgegeben.
also zb. mysql_query("SELECT Eintrag,bla,bla FROM Guestbook ORDER BY 'ID' DESC LIMIT $i,$z")
while Schleife durchlaufe ich dann das ganze.
Das funktioniert auch bestens. Jetzt ist folgendes passiert. Der 100. Eintrag. Alle Einträge die größer sind als 99 werden auf einmal an den Anfang gesetzt und alles ist durch einander. Für MySql ist also 100 kleiner als 99.
Woran liegt das??? und wie kann man das beheben?? Möglicherweise abwegig, aber ich frage trotzdem mal :)
Ist "ID" eine Zahl, oder eine String-Repräsentation einer Zahl?
Bei String-Vergleichen gilt tatsächlich, dass "100"<"99" ist. Um solche Probleme zu vermeiden, müsste man führende Nullen nutzen ("099"<"100").
Das liegt ganz einfach daran, dass String-Vergleiche keine unterschiedliche Wertigkeit der einzelnen Stellen kennen. Der Vergleich wird einfach von links nach rechts durchgeführt. "Frosch"<"Kuh". Dass die Strings unterschiedlich lang sind, interessiert hier schlicht nicht. Vgl:"20000"<"400".

Deswegen muss immer strikt unterschieden werden zwischen lexikographischer und numerischer Ordnung.

Gast
2004-04-11, 17:42:24
Ne es handelt sich hier nicht um String Vergleiche.
Irgendwie hat er die ganze ID Reihenfolge aufeinmal durcheinander gebracht. Wie kann ich am besten komplett neue IDs für die Einträge vergeben?
Also die gesamte Tabelle einmal durchlaufen und dabei jeder Zeile eine neue ID zuweisen. Dann hätte ich wieder Ordnung im ganzen System. Ich bin nur gerade zu doof eine einfache Schleife zu erstellen mit der ich diese Arbeit erledige. Irgendwie will das mit den Zeilen nicht so wie ich will. Ich versuche gerade mit einer while Schleife und mysql_num_rows() da etwas zu deikseln aber das will nicht. Kann mir jemand helfen? Ist ja nur ne kurze Schleife meiner Einschätzung nach.:)

Gast
2004-04-11, 18:11:53
So habs jetzt doch hinbekommen. ein kleines ; vergessen :)
Keine Ahnung woran das gelegen hat. Die Spalte wird zudem automatisch von mysql gefüllt.Damit hab ich überhaupt nichts am Hut. Auf Unique stand das ganze auch. Trotzdem hats die ganze Spalte komplett durch einandergebracht. Zumteil waren Lücken drin. Also es fehlten bsp. 4 Ids. alles komisch. Naja jetzt geht es wieder. Danke für die Hilfe