Frage

Wie kann ich nur numerische Reihenfolge erstellen, wenn die Spalte mit alphanumerischen Zeichen in MySQL enthält?

Spalte (Name) ist eindeutiges Feld.

Meine Tabelle enthält die Datensätze,

id  name
1   ab001
2   ab010
3   aa002
4   ac004
5   ba015
6   ba006
7   aa005
8   ac003

Die Ergebnisse müssen so sein,

id  name
1   ab001
3   aa002
8   ac003
4   ac004
7   aa005
6   ba006
2   ab010
5   ba015

Wenn ich diese Frage versuche Select * from test order by name, Ich erhalte nur die Ergebnisreihenfolge von Alpha -Zeichen. Wie bekomme ich das?

War es hilfreich?

Lösung

Angenommen, Ihre Saiten enden immer mit 3 Ziffern, die Sie verwenden könnten RIGHT:

SELECT id, name
FROM Table1
ORDER BY RIGHT(name, 3);

Ergebnis:

1, 'ab001'
3, 'aa002'
8, 'ac003'
4, 'ac004'
7, 'aa005'
6, 'ba006'
2, 'ab010'
5, 'ba015'

MySQL hat keine Unterstützung für Funktionale Indizes, Also wird diese Abfrage relativ langsam sein. Es wäre besser, Ihre Datenbank neu zu gestalten (z. B. die Nummer separat speichern), sodass die Bestellung über den Wert einer Funktion nicht erforderlich ist.

Andere Tipps

Ich würde so tun:

select id, name from Table1 order by names + 0, names;

ohne Bestellung:

mysql> select * from alpha;
+---+-------+
| i | name  |
+---+-------+
| 1 | ab001 |
| 2 | ab010 |
| 3 | aa002 |
| 4 | cc001 |
| 5 | cb010 |
| 6 | aaa02 |
+---+-------+
6 rows in set (0.00 sec)

Mit meiner Frage:

mysql> select i, name from alpha order by name + 0, name;
+---+-------+
| i | name  |
+---+-------+
| 3 | aa002 |
| 6 | aaa02 |
| 1 | ab001 |
| 2 | ab010 |
| 5 | cb010 |
| 4 | cc001 |
+---+-------+
6 rows in set (0.00 sec)

Ich hatte ein etwas anderes Problem, aber das zweite Beispiel hat für mich funktioniert. Ich würde es stimmen, aber ich habe gerade hier angefangen.

Ich hatte es mit einer einzelnen Varchar -Spalte zu tun, die irgendwelche Informationen enthalten konnte, aber es musste richtig sortieren, egal was drin war:

Meine Spalte könnte also Informationen enthalten wie:

A B C D E F G H

oder

01 02 03 04

Die Antwort von Xavier führte dazu, dass es in alphabetischer Reihenfolge war, wenn die Informationen alle alphabetisch oder numerisch waren, wenn die Informationen numerisch waren.

Vielen Dank

Vielen Dank!

Wenn Sie die ersten X -Zeichen als Buchstaben und den Rest als Zahlen und die Alpha -Zeichen variieren, sind Sie weitaus besser, wenn Sie Ihre Struktur ändern, um diese Daten in zwei Spalten zu legen - eine für die Intitalbuchstaben und eine für die Zahlen. Jetzt müssen Sie nicht jedes Mal, wenn Sie bestellen möchten, Koanversionen durchführen. Sie bestellen einfach zuerst die Buchstabenspalten, dann die numerische Spalte. Eine Neugestaltung Ihrer Struktur ist wirklich der bessere Weg, dies besonders zu tun, wenn Sie häufig bestellen oder wenn Sie einen großen Datensatz haben.

Sie könnten das aktuelle Feld sogar als PK verlassen und einen Abzug von den beiden neuen Feldern getrennt haben. Auf diese Weise werden die Daten in ein Format eingefügt, das bei der Eingabe oder Aktualisierung automatisch bestellt werden kann. Der gesamte aktuelle Code funktioniert weiterhin. Sie können jedoch nacharbeiten, um eine leistungsfähigere Bestellung zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top