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

Der DJ schrieb am 25.01.2004 um 16:59 Uhr

Hilft das hier vielleicht?

http://www.selfphp.info/funktionsreferenz/array_funktionen/natsort.php

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