Используйте MySQL, чтобы упорядочить штаты в алфавитном порядке - PullRequest
1 голос
/ 25 ноября 2011

Относительно новый для MySQL, так что это, вероятно, легко:

У меня есть таблица с именем Zip с тремя столбцами:

Zip varchar(255)
City varchar(255)
State enum('AL','AK','AZ','AR','CA',etc.,etc., 'WY'

Когда я запускаю запрос:

SELECT DISTINCT State FROM Zip ORDER BY State ASC;

Я получаю этот результат:

+-------+
| State |
+-------+
|       |
| AL    |
| AK    |
| AZ    |
| AR    |
etc.

Таким образом, он сортирует список по алфавиту по первой букве просто отлично, но НЕ сортирует по алфавиту по второй.

Я искал везде (w3schools, dev.mysql.com, stackoverflow, Google), и я не смог найти ничего о ORDER BY "вторая буква / символ" (или, по крайней мере, я не думаю, что я нашел что-нибудь, может быть, я просто не понял).

Есть идеи о том, что я могу сделать?

Ответы [ 3 ]

4 голосов
/ 25 ноября 2011

Попробуйте преобразовать перечисление в тип символа:

SELECT DISTINCT State
FROM Zip
ORDER BY CAST(State AS CHAR)
3 голосов
/ 25 ноября 2011

STATE - это перечисление, и поэтому оно сортируется по порядку, в котором оно находится в определении этого перечисления. (Обратите внимание, что у вас есть AZ, AR в вашем определении, и именно так они упорядочиваются).

Измените STATE на CHAR(2) (поскольку аббревиатуры штатов США не длиннее 2 букв), и ваш ORDER BY должен работать нормально.

(Кроме того, ZIP может быть значительно уменьшен, так как максимальный почтовый индекс составляет 10 символов - 5 для ZIP, дефис (тире) и расширение +4.)

0 голосов
/ 25 ноября 2011

Вы неправильно сортировали свое перечисление. Если бы вы просто использовали стандартные значения CHAR, а не перечислили, это сработало бы. Однако вы устанавливаете перечисление с фиксированным порядком, поэтому оно будет сортироваться так, как будто ваше перечисление было установлено.

Заказать ваш enum:

State enum('AK','AL','AR','AZ','CA',etc.,etc., 'WY'
...