Сортировка по текстовому полю

  • Автор темы Автор темы Novice
  • Дата начала Дата начала

Novice

Новичок
Сортировка по текстовому полю

Есть таблица с текстовым полем (VARCHAR, TEXT,...), в котором хранятся числа (INTEGER). Как выбрать записи, отсортированные по этому полю?

Понятно, что ORDER BY не катит, так как '25' < '9'
 
Originally posted by Popoff
хранить числа в подходящего типа поле
Прекрасно это понимаю, но так уж исторически сложилось, что атрибуты сущностей хранятся в таблице типа

id (foreign key) var(CHAR) value (TEXT)
-------------------------------------------------------
1 | descr | bla-bla-bla...
1 | content | sdfsdfsg.....
1 | rating | 12
2 | descr | blo-blo-blo...
2 | content | ghjkhukh.....
2 | rating | 15
........

вот и надо отсортировать записи по rating.
 
Имхо, лучше переделать "исторически сложившуюся" структуру по-нормальному, чем делать "урода на костылях"
 
выравнять длину всех строк добавлением нулей слева.

-~{}~ 04.02.05 20:09:

сортировать после того, как достал из базы
 
Переделывать структуру я за%бусь. Так уж устроено в оной цмс, и поэтому много чего заточено под такую структуру.

Нету что-то типа приведения типов в мускле? Просто не хочеться руками сортировать массив средствами пхп....

ALTER TABLE ? Там ошибка в запросе или ты предлагаешь поменять тип на инт?
 
Novice
приведенная тобой структура, конечно же, имеет право на существование, но она, мягко говоря, ужасна. рефракторинг может решить не только эту проблему, но и много других, которые могут встать перед тобой в будущем. этот тот случай, когда потратишь на рефракторинг на два дня больше сейчас - сэкономишь месяц потом + избавишь себя от головной боли. поэтому - рекомендую.

но если все же тебе так сильно не хочится заниматься рефракторингом, то есть еще один способ: order by 0+value
 
Popoff, меня это вполне устраивает :)
В данной ситуации рефакторинг будет очень дорого стоить, так как смотря на такую организацию БД, можешь представить как организовано все другое и как написаны скрипты. Тут просто надо добавить такую штуку и забыть.

Спасибо.
 
Сверху