|
|
|
| Есть таблица
id(int), name(varchar), sort(int)
|
Делаю выборку с сортировкой по полю `sort`
SELECT `name` FROM `table` ORDER BY `sort`
|
Сортировка идет "машинно", т.е 1,10,11,...9, как заставить сортировать правильно (по-человечески), т.е. 1,2,3....9
Сейчас решаю данную проблему следующим образом:
SELECT `name`, CAST(`sort` AS UNSIGNED) AS `natsort` FROM `table` ORDER BY `natsort`
|
| |
|
|
|
|
|
|
|
для: mihdan
(04.05.2009 в 17:33)
| | Сортировка идет "машинно"
"Машинно"?! :)))
Перепроверьте тип sort еще раз. Не может такого быть, чтобы при int так сортировалось. Поскольку у Вас запрос
SELECT `name` FROM `table` ORDER BY `sort`
..., то отсюда вообще нельзя сказать как сортируется по sort. Но, думаю, Вы просто сюда так скопировали.
P.S. "Нативная" вроде от native - родной. Или я ошибаюсь? :unsure: | |
|
|
|
|
|
|
|
для: Heavy
(04.05.2009 в 17:36)
| | Нативный - аналог natsort в php
Тип поля INT | |
|
|
|
|
|
|
|
для: mihdan
(04.05.2009 в 17:51)
| | Тип INT и сортируется как числа, по порядку. "Машинных" сортировок не бывает (во всяком случае я первый раз слышу такое понятии в Computer Science. оно откуда?). То, что вы показали -- типичный случай сравнения двух строковых полей, в которых записаны числа. | |
|
|
|
|
|
|
|
для: Heavy
(04.05.2009 в 17:54)
| | Сравните результат работы фунций sort(), natsort() для
<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
sort($array1);
echo "Обычная сортировка
";
print_r($array1);
natsort($array2);
echo "
Natural order сортировка
";
print_r($array2);
?>
Результат выполнения данного примера:
Обычная сортировка
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)
Natural order сортировка
Array
(
[3] => img1.png
[2] => img2.png
[1] => img10.png
[0] => img12.png
)
|
| |
|
|
|
|
|
|
|
для: mihdan
(04.05.2009 в 18:07)
| | При чём тут PHP'шный natsort? Вы тут утверждаете, что, мол, ORDER BY `sort`, где `sort` - поле типа INT неправильно сортируется. Я Вам говорю: это вздор. | |
|
|
|
|
|
|
|
для: Heavy
(04.05.2009 в 18:15)
| | Поле `sort` (INT) - 3 раза проверил ;) ORDER BY `sort` выдает лабуду, я же не придумываю
Вот структура
CREATE TABLE IF NOT EXISTS `bz_tree` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`pid` smallint(5) unsigned NOT NULL default '0',
`name` varchar(300) default NULL,
`content` longtext,
`sort` int(5) unsigned NOT NULL default '1',
`is_vis` smallint(1) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;
|
| |
|
|
|
|
|
|
|
для: mihdan
(04.05.2009 в 17:51)
| | Если выражаться корректно и без лишних эмоций, то такого метода в MySQL нет.
И сильно надеюсь, не будет. | |
|
|
|