Chris: MySQL: Sortierung gerät durcheinander

Hallo,

wenn ich folgende Abfrage über phpMyAdmin an meine Datenbank stelle, ist das Ergebnis wie erwünscht:

SELECT id, name, link
FROM intalk.web\_menuleft
WHERE active = '1'
ORDER BY CONVERT(id,CHAR) ASC

Die Spalte id konvertiere ich nach CHAR, weil dort die IDs so drinstehen:

11
12
13
131
132
133
134
135
14
15

... ubnd ich die Sortierung auch genau so haben möchte. Wie gesagt, in PhpMyAdmin alles einwandfrei.

Jetzt mache ich die gleiche Abfrage über mein PHP-Script:

$sql = "SELECT id, name, link FROM intalk.web\_menuleft WHERE active = '1' ORDER BY CONVERT(id,CHAR) ASC";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
 echo $row['name'];
}

Ergebnis:

11
12
133
134
132
135
131
14
15

Die Untersortierungen sind irgendwie durcheinander gewürfelt worden. Woran könnte das liegen?

Lg
Chris

  1. Hallo nochmal,

    ganz willkürzlich ist die Sortierung aus dem PHP-Script doch nicht. Ich habe folgendes System feststellt.

    Die Abfrage über PHPMyAdmin ergibt:

    11
    12
    13
    131
    132
    133
    134
    135
    136
    137
    138
    139
    1310
    1311
    1312
    14
    15
    16

    Über das PHP-Script sieht das so aus:
    11
    12
    13
    139
    138
    137
    136
    135
    134
    133
    132
    131
    1312
    1311
    1310

    Er fängt also bei einer Zehnerreihe dann von hinten an und arbeitet sich nach vorne durch.

    Merkwürdig merkwürdig...

    Lg
    Chris

  2. Hi Chris,

    11
    12
    13
    131
    132
    133
    134
    135
    14
    15

    Zuerst wollte ich dir eine solche Änderung vorschlagen:

    011
    012
    013
    014
    015
    131
    132
    133
    134
    135

    Also absolute Beibehaltung der Nummern in Reihe.

    Aber nach deiner weiteren Schilderung:

    $sql = "SELECT id, name, link FROM intalk.web\_menuleft WHERE active = '1' ORDER BY CONVERT(id,CHAR) ASC";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result))
    {
    echo $row['name'];
    }

    Ergebnis:

    11
    12
    133
    134
    132
    135
    131
    14
    15

    Die Untersortierungen sind irgendwie durcheinander gewürfelt worden. Woran könnte das liegen?

    Ich denke das Problem ist Irgendwo im Array zu finden, bzw. die Art und Weise wie es befüllt wird, da das Array die Daten so auflistet, wie es befüllt wird (wenn keine Datenposition [0].[1].[2] angegeben wird.

    Grüsse gary

  3. Hallo Chris,

    wenn ich folgende Abfrage über phpMyAdmin an meine Datenbank stelle, ist das Ergebnis wie erwünscht:

    SELECT id, name, link
    FROM intalk.web\_menuleft
    WHERE active = '1'
    ORDER BY CONVERT(id,CHAR) ASC

    Wenn hier etwas gewünschtes rauskommt, so ist das Zufall.

    Die Spalte id konvertiere ich nach CHAR, weil dort die IDs so drinstehen:

    *Ein* Zeichen. Alles was danach kommt, kann also beliebig sein. Sehr schön.

    11
    12
    13
    131
    132
    133
    134
    135
    14
    15

    Gib die Anzahl der Zeichen an!

    Freundliche Grüße

    Vinzenz