ORDER BY Problem!

Sith

Mitglied
Hi,

Also ich habe folgendes Problem ich lese aus einer Datei die TopUser des Forums herauß leider ordnet er sie komplett falsch hier der wichtige code:
PHP:
$sql = mysql_query("SELECT * FROM forum_user WHERE posts > 0 ORDER BY 'posts' DESC", $db) or die ('MySQL Fehler: '.mysql_error());
und ordnen tut er sie in etwa so:

Code:
1. User1 | 3 Beiträge!
2. User2 | 3 Beiträge!
3. User3 | 15 Beiträge!
4. User4 | 1 Beitrag!

help me pls
 
PHP:
$sql = mysql_query("SELECT * FROM forum_user WHERE posts > 0 ORDER BY posts DESC", $db) or die ('MySQL Fehler: '.mysql_error());
Ohne "'"?
Ist mir so spontan eingefallen
 
Also deiner Ausgabe nach hast du eine Spalte post, wo ein String (char, text, oder so) als Datentyp definiert ist. Das kannst du natürlich so nicht sortieren. Denn der ORDER BY überprüft beim Sortieren das 1. Zeichen hat der 2 oder mehr Datensätze gefunden bei denen das 1. Zeichen gleich ist, dann überprüft er das 2. Zeichen nun da ist nun mal ASCII-technisch eine "5" größer als ein Leerzeichen.

Also musst du deine Tabelle auf jedem Fall besser strukturieren, sonst funktioniert das nicht.

Gruss Homer
 
wenn er es, wie ich mal bei einem Feld namens "Posts", als Integer (int) deklariert hat, sollte es beim sortieren keine Probleme geben, da es dann nach der Größe (der Zahl) sortiert.
 
da er es uns aber nicht verraet,
werden wir es nie erfahren und ewig weiterraetseln...

ich wette 5:1 dass posts _kein_ int ist ;)
 
Original geschrieben von gecko
da er es uns aber nicht verraet,
werden wir es nie erfahren und ewig weiterraetseln...

ich wette 5:1 dass posts _kein_ int ist ;)

Daran kann es auch nicht liegen. Wenn wirklich nur eine Zahl drinne steht so macht mysql auch keine Probleme selbst wenn die Spalte als char deklariert ist.

Dein fehler steckt wo anders. Wie liest du denn aus ? mit fetch ?
gleich ausgabe oder in ein array zwischenspeicher ?
infos infos bitte :)
 
@HolyFly:
mysql macht doch probleme wenn das feld ein varchar ist.
da stringvergleiche nunmal zeichenweise sind, ist 3 groesser als 15 und das wiederum groesser als 1.

ich erhoehe meinen gebot! 10:1 gegen int! ;)
 
gecko ich wusste das auch nicht 100 % genau.
Drum habe ich eben eine Tabelle mir nem char feld erstellt und unsortiert mit numerischen werten eingefügt.
Das sotieren nach den numerischen chars hat einwandfrei funktioniert.

War mir da auch nicht sicher aber hat funktioniert.

[Update]
Varchar macht ebenso keine Probleme solange nur numerische Werte drinne stehen.
[/Update]
 
wenn dein varchar feld auch nur 1 zeichen lang ist gibts auch keine probleme ;)

... probier das dann mal bitte mit z.b. einem varchar(255) und den werten 3,15,1 aus ... 3 wird definitiv groesser als 15 sein!

CREATE TABLE blah (
a varchar(255) NOT NULL default ''
) TYPE=MyISAM;

INSERT INTO blah VALUES ('3');
INSERT INTO blah VALUES ('3');
INSERT INTO blah VALUES ('15');
INSERT INTO blah VALUES ('1');

und ein SELECT * FROM `blah` ORDER BY `a` DESC
ergibt 3,3,15,1

( hab doch neulich erst ne stringbibliothek geschrieben, ich wuerd sonst vom glauben abfallen wenn stringvergleiche in mysql anders gehen ;) )

probiers mal aus, ich bin immernoch der meinung das varchar das problem ist.
 
Zurück