Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Правильно отсортировать VARCHAR
 
 автор: kusuk   (07.05.2009 в 11:50)   письмо автору
 
 

столбец типа VARCHAR содержит числа. логично было бы поменять тип на интеджер, НО некоторые ячейки содержат значения вида 12(3).
собственно сортируется всё это коряво... может есть способ какой нибудь ? )

  Ответить  
 
 автор: Trianon   (07.05.2009 в 12:00)   письмо автору
 
   для: kusuk   (07.05.2009 в 11:50)
 

12(3) это не число. а значит о какой-либо числовой сортировке речь идти не должна.

  Ответить  
 
 автор: Kusuk   (07.05.2009 в 12:04)   письмо автору
 
   для: Trianon   (07.05.2009 в 12:00)
 

т.е. вариантов нет ? =(

  Ответить  
 
 автор: Владимир55   (07.05.2009 в 12:06)   письмо автору
 
   для: Kusuk   (07.05.2009 в 12:04)
 

Иногда меня устраивает вот такая сортировка:
SELECT * FROM pokaz_rekl ORDER BY CAST(clik as UNSIGNED) DESC

  Ответить  
 
 автор: Trianon   (07.05.2009 в 12:11)   письмо автору
 
   для: Владимир55   (07.05.2009 в 12:06)
 

(удивленно) clik не влезает в целый диапазон?

  Ответить  
 
 автор: Владимир55   (07.05.2009 в 12:15)   письмо автору
 
   для: Trianon   (07.05.2009 в 12:11)
 

Получается так, что результаты сортировки больше похожи на то, как это делает человек исходя из своих привычек.

  Ответить  
 
 автор: Trianon   (07.05.2009 в 12:32)   письмо автору
 
   для: Владимир55   (07.05.2009 в 12:15)
 

ну а исходный тип этого поля какой?

  Ответить  
 
 автор: Владимир55   (07.05.2009 в 13:10)   письмо автору
 
   для: Trianon   (07.05.2009 в 12:32)
 

VARCHAR

  Ответить  
 
 автор: Trianon   (07.05.2009 в 13:50)   письмо автору
 
   для: Владимир55   (07.05.2009 в 13:10)
 

Но почему, христа ради?
Ведь если тип поля сделать INT, то сортировка будет идти безо всяких ухищрений вроде CAST.

  Ответить  
 
 автор: Владимир55   (07.05.2009 в 14:05)   письмо автору
 
   для: Trianon   (07.05.2009 в 13:50)
 

Все так оно и есть, как Вы говорите!

Но если содержимое сортируемого параметра имеет вид
1.htm
2.htm
10.htm
то желательная мне сортировка получается получается лишь таким образом.
Во всяком случае, так получается у меня (хотя может можно и лучше).

  Ответить  
 
 автор: Trianon   (07.05.2009 в 14:28)   письмо автору
 
   для: Владимир55   (07.05.2009 в 14:05)
 

>Но если содержимое сортируемого параметра имеет вид
>
1.htm
>2.htm
>10.htm

то обычно этот параметр называется не click.

>то желательная мне сортировка получается получается лишь таким образом.
>Во всяком случае, так получается у меня (хотя может можно и лучше).

Само собой. достаточно лишь называть файлы числами с явными нулями. 000.htm 010.htm и т.д.

  Ответить  
 
 автор: cheops   (07.05.2009 в 12:05)   письмо автору
 
   для: kusuk   (07.05.2009 в 11:50)
 

>12(3)
Если не сложно, расшифруйте значение?

PS В принципе никогда не поздно, изменить структуру таблицы, создать дополнительное поле, перегнать туда (3), удалить этот суффикс из первого поля и изменить тип обоих полей. В принципе в этом и заключается задача программиста базы данных - постоянно её модифицировать, чтобы выжать из неё всё что можно. Существует только два фундаментальных способа оптимизации обслуживающего кода и баз данных: чтобы было удобно программистам (скорость разработки) и машине (скорость вычисления). Начинают с первого способа, если не хватает мощности, переходят ко второму. Зачастую, за один год можно от первого ко второму способу оптимизации и обратно скакать раза 3-4, в зависимости от политического, временного, денежного, вычислительного или эргономического фактора. Бояться этого не нужно, в этом и состоит жизнь боевого (а не академического) программиста.

  Ответить  
 
 автор: Kusuk   (07.05.2009 в 12:20)   письмо автору
 
   для: cheops   (07.05.2009 в 12:05)
 

в столбце хранятся номера квартир, но т.к. есть общежития то соостветсвенно добавляется номер комнаты.

в общем нашел выход.
тип double и через точку указывать номер комнаты

  Ответить  
 
 автор: cheops   (07.05.2009 в 12:28)   письмо автору
 
   для: Kusuk   (07.05.2009 в 12:20)
 

Лучше DECIMAL используйте - он гораздо точнее классического числа с плавающей точкой.

  Ответить  
 
 автор: Trianon   (07.05.2009 в 12:36)   письмо автору
 
   для: cheops   (07.05.2009 в 12:28)
 

8 байт как с куста .
Однозначно лучше отдельную колонку для номера комнаты завести вида TINYINT(1) NULL
А исходную сделать SMALLINT

  Ответить  
 
 автор: Kusuk   (07.05.2009 в 12:39)   письмо автору
 
   для: Trianon   (07.05.2009 в 12:36)
 

может это и будет правильней, но при нынешних ресурсах 8 байт ниочём =)

  Ответить  
 
 автор: Trianon   (07.05.2009 в 12:42)   письмо автору
 
   для: Kusuk   (07.05.2009 в 12:39)
 

Правильней это не только с точки зрения экономии ресурсов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования