1 Востаннє редагувалося fed_lviv (15.04.2015 16:24:51)

Тема: MySQL сортування адреси ([вулиця] [,] [номер будівлі])

В таблиці є поле address в якому прописується адреса (Наукова, 116б; Володимира Великого, 2; Мазепи, 3а; тощо). Сортую адресу:

SELECT address    
FROM objects
ORDER BY address COLLATE utf8_unicode_ci;

Начебто все добре по алфавіту, але проблема з номерами будівель:
...
Володимира Великого, 125
Володимира Великого, 20
Володимира Великого, 32а
...
Приходиться робити ось такий запит, але вигляд цього запиту лякає, чи можна, якось гарніше зробити запит
P.S. Змінювати таблицю неможу.

SELECT address
FROM objects
ORDER BY 
    SUBSTRING_INDEX(address, ',',1) COLLATE utf8_unicode_ci, 
    cast(SUBSTRING_INDEX(address, ',',-1) AS unsigned);

...
Володимира Великого, 20
Володимира Великого, 32а
Володимира Великого, 125
...

2

Re: MySQL сортування адреси ([вулиця] [,] [номер будівлі])

Погане проектування - ваша таблиця навіть не знаходиться у першій нормальні формі, де кожен атрибут може мати лише одне значення, тобто вулиця і будинок повинні знаходитися в різних полях, а не в одному. Тому тут простий запит зробити неможливо

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/