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

Форум MySQL

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

 

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

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

тема: Сортировка по столбцу содержащему цифры и буквы
 
 автор: dim0s   (04.02.2008 в 00:37)   письмо автору
 
 

Здравствуйте. У меня такой вопрос. Не смог найти ничего , может кто подскажет.
Тип данных столбца - VARCHAR. Храняться всякие опции товаров, типа цвет,год, вообщем что угодно. Со словами все нормально, но вот если строка в начале содержит числа....
Например 60 cm, 90 cm,120 cm при сортировке ORDER BY ASC , выводяться в таком порядке:
120 cm
60 cm
90 cm
Что понятно не то. И понятно почему :/
Можно ли както правильно отсортировать посредством MySQL?

   
 
 автор: а-я   (04.02.2008 в 00:48)   письмо автору
 
   для: dim0s   (04.02.2008 в 00:37)
 

ну это же строка... сортировка идет по каждому символу, перебором...

по правилам

[знаки] < 0-9 < A-Z < a-z < А-Я < а-я


=) надо что вроду natsort() - из PHP))

   
 
 автор: dim0s   (04.02.2008 в 01:11)   письмо автору
 
   для: а-я   (04.02.2008 в 00:48)
 

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

   
 
 автор: Trianon   (04.02.2008 в 09:19)   письмо автору
 
   для: dim0s   (04.02.2008 в 01:11)
 

Это неправильный подход.
Количественные данные внавал в тексте не хранят. Если, конечно, хотят работать с ними как с числами.

natsort() же - функция, являющаяся олицетворением этого неправильного подхода.

   
 
 автор: dim0s   (04.02.2008 в 14:39)   письмо автору
 
   для: Trianon   (04.02.2008 в 09:19)
 

Ну может я неправильно описал. Данные текстовые, просто в них встречаются тексты, где первыми идут цифры.
Например:
Ширина
160 см (цена+ 150)
60 см (цена+ 100)
90 см (цена+ 120)
цена храниться отдельно и с ней потом работать. А список как то бы отсортировать. Можно или нет? Всмысле понятно, что все можно, если очень хочеться :), посредством SQL запроса - можно?

   
 
 автор: Unkind   (04.02.2008 в 14:44)   письмо автору
 
   для: dim0s   (04.02.2008 в 14:39)
 

Создайте отдельное поля для ширины. А тип - числовой.

   
 
 автор: dim0s   (04.02.2008 в 15:38)   письмо автору
 
   для: Unkind   (04.02.2008 в 14:44)
 

Ну это я Для примера ширину написал, там же может быть и не ширина.
Например:

Ширина
160 см (цена+ 150)
60 см (цена+ 100)
90 см (цена+ 120)

Цвет
Красный (цена+ 150)
Синий (цена+ 100)
Зеленый (цена+ 120)

Вообщем проблема в том, чтобы отсортировать по тестовому полю, где в тексте могут первыми стоять цифры(а могут и не стоять)

   
 
 автор: Trianon   (04.02.2008 в 15:44)   письмо автору
 
   для: dim0s   (04.02.2008 в 15:38)
 

сортировка по текстовому полю осуществляется у Вас абсолютно корректно.
Перечитайте еще раз мой ответ.

   
 
 автор: dim0s   (04.02.2008 в 15:54)   письмо автору
 
   для: Trianon   (04.02.2008 в 15:44)
 

Но ведь цены храняться в отдельном поле(не текстовом), просто отсортировать надо не по ним а по названиям. А названия, согласитесть, могут быть любым текстом, и таким как в примере.
Да по тестовому полю, все так и должно сортироваться, но ведь не по человечески. А как по человечески сделать?

   
 
 автор: Unkind   (04.02.2008 в 16:00)   письмо автору
 
   для: dim0s   (04.02.2008 в 15:38)
 

> Ну это я Для примера ширину написал, там же может быть и не ширина.
А что же это поле значит? Ширина или цвет? В одну кучу всё не пихайте.

   
 
 автор: dim0s   (04.02.2008 в 16:08)   письмо автору
 
   для: Unkind   (04.02.2008 в 16:00)
 

Давайте так, есть два поля:
первое - название(varchar)
второе -значение(decimal)

- все логично, нигде никакой кучи, не правда-ли?
Отсортировать надо по названию, так чтоб, даже если вназвании присутсвуют цифры выглядело по человечески.

   
 
 автор: Unkind   (04.02.2008 в 16:21)   письмо автору
 
   для: dim0s   (04.02.2008 в 16:08)
 

> первое - название(varchar)
Название чего?

> второе -значение(decimal)
Откуда взялся decimal? Вы же сказали, что у Вас текстовый тип?

   
 
 автор: dim0s   (04.02.2008 в 16:32)   письмо автору
 
   для: Unkind   (04.02.2008 в 16:21)
 

цена храниться отдельно и с ней потом работать
Да и не суть важно. Так оно и есть. Отсортироать надо один столбец впринципе.
Строковой.
типа:

красный
60см
синий
120 см
90 кг
зеленый
что-угодно

так чтоб получилось

60см
90 кг
120 см
зеленый
красный
синий
что-угодно

т.е сначала цифры, в порядке убывания, потом по алфавиту

   
 
 автор: Trianon   (04.02.2008 в 17:23)   письмо автору
 
   для: dim0s   (04.02.2008 в 16:08)
 

>Давайте так, есть два поля:
>первое - название(varchar)
>второе -значение(decimal)
>
>- все логично, нигде никакой кучи, не правда-ли?
Конечно. Выполняется так:
ORDER BY `первое`,`второе`

   
 
 автор: Unkind   (04.02.2008 в 17:25)   письмо автору
 
   для: Trianon   (04.02.2008 в 17:23)
 

Я так понял, что второе поле (цена) тут не при чем. Сортировка идет только по "куче". Собственно, смысла в этом нет абсолютно.

   
 
 автор: Trianon   (04.02.2008 в 17:31)   письмо автору
 
   для: Unkind   (04.02.2008 в 17:25)
 

В 16:08 автор согласился на разумный компромисс. Я на него и ответил. :)

   
 
 автор: dim0s   (04.02.2008 в 17:35)   письмо автору
 
   для: Unkind   (04.02.2008 в 17:25)
 

Всем спасибо.
Пришлось добавить еще одно поле(decimal_value), куда значение записываеться если строка состоит из цифр.
Потом

SELECT *
FROM
temp_table
ORDER BY decimal_value ASC, string_value

Сойдет более-менее

   
 
 автор: dim0s   (04.02.2008 в 17:52)   письмо автору
 
   для: dim0s   (04.02.2008 в 17:35)
 

P.s.
Злые Вы :)
Куча вынужденная, так как это есть интернет магазин, где владелец может добавлять сам опции к товарам. Типа добавляет опцию "Размер", а потом к ней еще список значений :
название - доп. цена.

А размер, например он может прописать XXL или 56. Тобишь получиться
XXL - (+20)
или
56 - (+20)

А размеры должны идти попорядку вроде бы. Это опять же все отвлеченно - названия могут быть любыми.

Еще раз спасибо. Пока.

   
Rambler's Top100
вверх

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