[MySQL] Sortieren nach Spalte
Steffi
- datenbank
Hi Forum,
ich möchte gern meine Abfrage sortiert ausgeben, dass Problem dabei ist, dass die Spalte, nach der sortiert werden soll unterschiedlichste Werte enthält. Das Problem ist, dass entweder nach Buchstaben oder nach Zahlen sortiert wird. Wie leicht zu erkennen ist, es handelt sich um Ports:
+-------+
|Name |
+-------+
|Fa0/10 |
|Fa0/1 |
|VLAN22 |
|Fa0/2 |
|VLAN10 |
|VLAN1 |
|VLAN3 |
+-------+
Kann nach der Spalte Name "richtig" sortiert werden, so dass ich folgendes erhalte:
+-------+
|Name |
+-------+
|Fa0/1 |
|Fa0/2 |
|Fa0/10 |
|VLAN1 |
|VLAN3 |
|VLAN10 |
|VLAN22 |
+-------+
Danke,
Steffi
Moin,
+-------+
|Name |
+-------+
|Fa0/10 |
|Fa0/1 |
|VLAN22 |
|Fa0/2 |
|VLAN10 |
|VLAN1 |
|VLAN3 |
+-------+
also ich würde die Tabelle überarbeiten, z.B. so, dass es eine Spalte für die Vlans gibt worin dann entweder der numerische Wert im Record steht, oder der Vlan - Name oder gleich für die Vlans zwei Spalten anlegen (Spalten => vlan_name, vlan_nr). Gleiches für die Ports Fastethernet (Spalte => fa0).
Somit kannst Du die Sortierfunktion der DB Enginge konsquent nutzen.
--roro
echo $begrüßung;
ich möchte gern meine Abfrage sortiert ausgeben, dass Problem dabei ist, dass die Spalte, nach der sortiert werden soll unterschiedlichste Werte enthält. Das Problem ist, dass entweder nach Buchstaben oder nach Zahlen sortiert wird.
Das Stichwort dazu lautet "natürliche Sortierung" bzw. "natural sort". Mir ist nicht bekannt, dass MySQL das könnte.
Du kannst statt eines Spaltennamen auch einen berechneten Ausdruck angeben, doch scheinen mir die Daten nicht sehr geeignet dafür zu sein. Vielleicht lässt sich mit einem regulären Ausdruck der Text von der Zahl trennen und die Zahl dann, in einen numerischen Typ umgewandelt, getrennt vom Text sortieren.
Ich denke, die einfachere Variante führt über ein Sortieren der Ergebnismenge im abfragenden Programm, so die verwendete Programmiersprache/Bibliothek eine natürliche Sortierung unterstützt. (PHP kann das mit natsort() und Konsorten.)
echo "$verabschiedung $name";
Hi,
Das Stichwort dazu lautet "natürliche Sortierung" bzw. "natural sort". ˙...
Ich denke, die einfachere Variante führt über ein Sortieren der Ergebnismenge im abfragenden Programm, so die verwendete Programmiersprache/Bibliothek eine natürliche Sortierung unterstützt. (PHP kann das mit natsort() und Konsorten.)
die Datenprobe
+-------+
|Name |
+-------+
|Fa0/10 |
|Fa0/1 |
|VLAN22 |
|Fa0/2 |
|VLAN10 |
|VLAN1 |
|VLAN3 |
+-------+
deutet darauf hin, dass das Vorhaben nicht realisierbar ist. Woher soll eine Sortierfubktion wissen, wo die Kurzbezeichnung(?) endet und die Versionsnummer(?) beginnt?
Also erst einmal - wie von Rolfi angeregt - die Daten normalisieren.
MFG
Mike
echo $begrüßung;
Woher soll eine Sortierfubktion wissen, wo die Kurzbezeichnung(?) endet und die Versionsnummer(?) beginnt?
Das zu erkennen ist das besondere Merkmal einer "natürlich" sortierenden Funktion gegenüber einer "herkömmlichen" sortierenden.
echo "$verabschiedung $name";
Hi,
Woher soll eine Sortierfubktion wissen, wo die Kurzbezeichnung(?) endet und die Versionsnummer(?) beginnt?
Das zu erkennen ist das besondere Merkmal einer "natürlich" sortierenden Funktion gegenüber einer "herkömmlichen" sortierenden.
aber nur, wenn die Trennung auch "natuerlich" erfolgt. (Die Probedaten lassen nicht die Schlussfolgerung zu, dass die Kurtbezeichnung(?) alphabetisch und die Versionsnummer(?) numerisch kommt. Ich wuerde nicht einmal auf alphanumerische Inhalte tippen wollen, wie auch der slash (oder war es ein backslash?) in der Versionsnummer(?) nahelegt. :)
Mike
echo $begrüßung;
(Die Probedaten lassen nicht die Schlussfolgerung zu, dass die Kurtbezeichnung(?) alphabetisch und die Versionsnummer(?) numerisch kommt. Ich wuerde nicht einmal auf alphanumerische Inhalte tippen wollen, wie auch der slash (oder war es ein backslash?) in der Versionsnummer(?) nahelegt. :)
Es müsste sich bei den FaXX/YY um Bezeichnungen von Ports eines oder mehrerer Netzwerkswitche handeln. Fa steht für den Typ des Einschubs im Slot, XX für den Slot (eine Komponente hat mehrere Slots), und mit YY wird die Buchse im Slot durchnummeriert.
Woher soll eine Sortierfunbktion wissen, wo die Kurzbezeichnung(?) endet und die Versionsnummer(?) beginnt?
Das zu erkennen ist das besondere Merkmal einer "natürlich" sortierenden Funktion gegenüber einer "herkömmlichen" sortierenden.
aber nur, wenn die Trennung auch "natuerlich" erfolgt.
Der "natural ordering"-Algorithmus erkennt Zahlen-Teile und behandelt sie als Einheit. Er trennt beispielswise das FaX/YY selbständig auf in die 4 Teile Fa, XX, / und YY. (VLANZ wird aufgeteilt nach VLAN und Z.) Er sortiert dann die Teile einzeln. Stringteile werden wie üblich sortiert, Zahlen so wie es ein Mensch tun würde: 1 < 2 < 10 < 11 etc.
Das Ergebnis von PHPs natsort(), wendet man sie auf die Werte im ersten Kasten des OPs an, entspricht dem zweiten, "richtig" sortierten Kasten.
echo "$verabschiedung $name";
Hi,
Das Stichwort dazu lautet "natürliche Sortierung" bzw. "natural sort". Mir ist nicht bekannt, dass MySQL das könnte.
MySQL nicht, PHP schon - ging auch super - Danke!