Сортировка order by

kombo

Новичок
Сортировка order by

Подскажите пожалуйста как отсортировать по целым числам в поле char , например

1000
черный:1700|синий:1250
зеленый:1300
500

Нужно отсортировать по первым значениям integer встречающихся в поле, т.е. получить

500
1000
зеленый:1300
черный:1700|синий:1250
 

_RVK_

Новичок
kombo
Очень похоже на то, что БД спроектирована неправильно.
 

kombo

Новичок
Я понимаю о чем ты, но не хотелось создавать отдельную таблицу id,color,price

И все-таки как насчет сортировки ?
 

Falc

Новичок
kombo
>>500
>>1000
>>зеленый:1300
>>черный:1700|синий:1250

>>но не хотелось создавать отдельную таблицу id,color,price

Нужную цену ты регами вытаскиваешь?
Может проще вообще все в одном поле хранить?
 

_RVK_

Новичок
kombo нужно делать правильно! Но если не хочется делать правильно, то вытаскиваешь все в масив и сортируешь методами PHP.
Сам пойми, что это медленее и лишний код. Так что переделывай базу и вопрос отпадет сам собой.
 

kombo

Новичок
2 Falc:
нет в данном случае не регами - эксплодами
>>Может проще вообще все в одном поле хранить?
Это юмор, я так понял ))

2 Diesel:
>>Так что переделывай базу и вопрос отпадет сам собой.
Зато появится новая забота - правильное ведение той дополнительной таблицы. Интерфейс для пополнения базы не планирую пока делать

2 STUV: где-то я видел приемы для похожих ситуаций. Решение быть должно
 

_RVK_

Новичок
kombo
сделать подобный интерфейс 15 мин делов.
>Решение быть должно.
SQL нет. На PHP я сказал как сделать.
 

StUV

Rotaredom
сам не пробовал....
может что-то вроде прокатит:

SELECT
SUBSTRING(your_field, LOCATE(':', your_field)) AS new_field
FROM .....
ORDER BY new_field

короче - RTFM MySQL/String functions


зы: еще раз - никогда с подобным не заморачивался, так что совет чисто теоретический

-~{}~ 09.03.04 13:30:

ЗЫЫ: может это прокатит

SUBSTRING_INDEX(str,delim,count)
Возвращает подстроку из строки str перед появлениям count вхождений разделителя delim. Если count положителен, то возвращается все, что находится слева от последнего разделителя (считая слева). Если count отрицателен, то возвращается все, что находится справа от последнего разделителя (считая справа):
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
 

Falc

Новичок
kombo
>> нет в данном случае не регами - эксплодами
>> >>Может проще вообще все в одном поле хранить?
>>Это юмор, я так понял ))

Первый вопрос, тоже был юмором :)

Меняй структуру тебе говорят, а то дальше хуже будет.
 

kombo

Новичок
Ладно, уговорили :)). Попробую варианты от STUV, если не получится создам таблицу. Интерфейс админский все-равно придется делать рано или поздно

-~{}~ 10.03.04 10:59:

Вариант
SELECT
SUBSTRING(your_field, LOCATE(':', your_field)) AS new_field
FROM .....
ORDER BY new_field

отлично работает, даже не пришлось "отрезать" substr после первого "|"
 

StUV

Rotaredom
kombo
интересно только - как в этом случае мускул сортирует полученные "числа":

т.е. не получится ли, что "500....." > "1000......" - ?
 

kombo

Новичок
StUV

С числами получилось все нормально, приводит именно к тому результату, который требовался
 
Сверху