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

Форум MySQL

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

 

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

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

тема: Нативная сортировка
 
 автор: mihdan   (04.05.2009 в 17:33)   письмо автору
 
 

Есть таблица

id(int), name(varchar), sort(int)


Делаю выборку с сортировкой по полю `sort`

SELECT `name` FROM `table` ORDER BY `sort`


Сортировка идет "машинно", т.е 1,10,11,...9, как заставить сортировать правильно (по-человечески), т.е. 1,2,3....9

Сейчас решаю данную проблему следующим образом:

ORDER BY BINARY(`sort`)


SELECT `name`, CAST(`sort` AS UNSIGNED) AS `natsort` FROM `table` ORDER BY `natsort`

  Ответить  
 
 автор: Heavy   (04.05.2009 в 17:36)   письмо автору
 
   для: mihdan   (04.05.2009 в 17:33)
 

Сортировка идет "машинно"
"Машинно"?! :)))

Перепроверьте тип sort еще раз. Не может такого быть, чтобы при int так сортировалось. Поскольку у Вас запрос
SELECT `name` FROM `table` ORDER BY `sort`
..., то отсюда вообще нельзя сказать как сортируется по sort. Но, думаю, Вы просто сюда так скопировали.

P.S. "Нативная" вроде от native - родной. Или я ошибаюсь? :unsure:

  Ответить  
 
 автор: mihdan   (04.05.2009 в 17:51)   письмо автору
 
   для: Heavy   (04.05.2009 в 17:36)
 

Нативный - аналог natsort в php
Тип поля INT

  Ответить  
 
 автор: Heavy   (04.05.2009 в 17:54)   письмо автору
 
   для: mihdan   (04.05.2009 в 17:51)
 

Тип INT и сортируется как числа, по порядку. "Машинных" сортировок не бывает (во всяком случае я первый раз слышу такое понятии в Computer Science. оно откуда?). То, что вы показали -- типичный случай сравнения двух строковых полей, в которых записаны числа.

  Ответить  
 
 автор: mihdan   (04.05.2009 в 18:07)   письмо автору
 
   для: 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
)

  Ответить  
 
 автор: Heavy   (04.05.2009 в 18:15)   письмо автору
 
   для: mihdan   (04.05.2009 в 18:07)
 

При чём тут PHP'шный natsort? Вы тут утверждаете, что, мол, ORDER BY `sort`, где `sort` - поле типа INT неправильно сортируется. Я Вам говорю: это вздор.

  Ответить  
 
 автор: mihdan   (05.05.2009 в 11:22)   письмо автору
 
   для: 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 ;

  Ответить  
 
 автор: Trianon   (04.05.2009 в 18:22)   письмо автору
 
   для: mihdan   (04.05.2009 в 17:51)
 

Если выражаться корректно и без лишних эмоций, то такого метода в MySQL нет.
И сильно надеюсь, не будет.

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

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