ThWboard Support-Forum (Archiv)
Ort: / Boardübersicht / PHP / MySQL Probleme / Reihenfolge beim auslesen aus der Datenbank
Seite 1 von 1
MrNase schrieb am 25.01.2004 um 15:41 Uhr
Hoi :)
Ich lese etwas aus der Datenbank aus und sortiere es per
ORDER BY kampf_punkte DESC LIMIT 10
Nun hab ich aber das Problem, dass z.B. 4.5 vor 24.2 kommt. Wohl weil da ein '.' zwischen ist. Wie kann ich das beheben?
Hab grad festgestellt: sogar "25800" kommt vor "1132000".
MrNase schrieb am 25.01.2004 um 16:46 Uhr
*g
Jetzt dachte ich, ich könnte mit round(); verhindern, dass ein '.' drin auftaucht und dann würde es gehen. Aber Pustekuchen :D
MrNase schrieb am 25.01.2004 um 17:10 Uhr
Hey :)
Spitze, hat geklappt :)
Ich musste zusätzlich noch
ORDER BY xxx DESC
entfernen und jetzt geht es :)
MrNase schrieb am 26.01.2004 um 18:00 Uhr
Geht doch nicht... Ich hab folgendes:
$r_xxx = thwb_query("SELECT username, userid, punkte FROM ".$pref."user LIMIT 10");
$i = "0";
while( $a_xxx = mysql_fetch_array($r_xxx) )
{
natsort($a_xxx);
$i++;
$i % 2 == 0 ? $user['bgcolor'] = $style['CellA'] : $user['bgcolor'] = $style['CellB'];
}
Aber natsort macht keinen
Narodnaja schrieb am 26.01.2004 um 19:37 Uhr
welchen Typ hat denn die Spalte "punkte" ? Wenn das Kommazahlen sind, ja wohl kein Integer, oder ?
Musst du vielleicht den Typ ändern, entweder in der DB oder bei der Abfrage. Gib mal weitere Info =)
MrNase schrieb am 26.01.2004 um 21:08 Uhr
Der Typ ist varchar(255) und in dieser Spalte sind keine Kommazahlen. Sie werden vorher gerundet. :)
bdominik schrieb am 26.01.2004 um 22:02 Uhr
und eben da liegt der hun gegraben! Du mußt das Feld einfach zu nem Int machen, dann läuft alles wieder wie normal!
MrNase schrieb am 26.01.2004 um 22:27 Uhr
Steht jetzt auf 'int(11)' und es geht immernoch nicht :(
Narodnaja schrieb am 26.01.2004 um 22:43 Uhr
naja, du kannst ja auch keine Kommazahlen in integer umwandeln, versuchs doch mal so:
while( $a_xxx = mysql_fetch_array($r_xxx) )
{
$a_zahl[] = doubleval ($a_xxx['Punkte']);
// damit wandelst du sie in den korrekten Typ "double" um und schreibst ein entsprechendes Array
}
$a_zahl = natsort($a_zahl);
Oder versuch mal, den richtigen Typ in der Spalte einzustellen (eben double).
MrNase schrieb am 27.01.2004 um 14:08 Uhr
egal ob der Typ auf varchar oder double steht... $a_zahl liefert immer '1' raus.
Jürgen S. schrieb am 27.01.2004 um 16:44 Uhr
Hallo MrNase,
wonach willst du sortieren? Nach Punkten?
Gruß
jürgen S.
Narodnaja schrieb am 27.01.2004 um 17:52 Uhr
nur um sicherzugehen: Du bist aber sicher, dass noch vernünftige Werte in den Feldern stehen ? Wenn du den Spaltentyp bei Fließkommazahlen auf INT geändert hast, könnte durchaus sein, dass das die Werte darin nicht gut vertragen haben.
MrNase schrieb am 27.01.2004 um 19:47 Uhr
userid punkte
1 225
2 226
3 6
4 0
Jürgen S. schrieb am 27.01.2004 um 21:02 Uhr
Hallo MrNase,
wenn ich mir das so ansehen sollte es mit
SELECT username, userid, punkte FROM ".$pref."user ORDER BY userid DESC LIMIT 5
nicht geht z.b.
SELECT username, userid, punkte FROM ".$pref."user ORDER BY userid , punkte DESC LIMIT 5
Da habe ich festgestellt, das macht er nicht korrekt, da ignoriert er "DESC"
bdominik schrieb am 27.01.2004 um 21:03 Uhr
ja, du mußt auch schreiben
ORDER BY userid DESC, punkte DESC
Seite 1 von 1