Mysql сортировка текста с цифрами

Murder

Новичок
В общем есть поле title в нем в основном текст но есть текст такого вида *текст 75 текст* и *текст 150 текст*
если делать с помощью ORDER BY `title` то оно неправильно сортирует с цифрами если ORDER BY `title`+0 то правильно, но... последние добавленные записи всегда добавляются вконец(не сортируются)... как быть?
 

Фанат

oncle terrible
Команда форума
Ты что-то путаешь.
*текст 75 текст*+0 будет равно нулю. и никакой сортировки не будет.

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

Murder

Новичок
в принципе написал все как есть... в общем есть поле title в нем в основном такое *атекст атекст*, *атекст бтекст*, *бтекст текст* но бывает и такое *втекст текст 100 текст* , *втекст текст 20текст*, втекст текст 75 текст в основном везде текст разный
хочу что бы сортировало так :
атекст атекст
атекст бтекст
бтекст текст
втекст текст 20 текст
втекст текст 75 текст
втекст текст 100 текст
 

Фанат

oncle terrible
Команда форума
так не получится сортировать.

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

Murder

Новичок
ну к примеру:
*Нагреватель с терморегулятором, ViaAqua 25*
*Нагреватель с терморегулятором, ViaAqua 50*
*Нагреватель с терморегулятором, ViaAqua 100*
*Нагреватель с терморегулятором, ViaAqua 200*
нужно что бы оно шло по порядку как написано это в одной из категорий, есть такие же но другим текстом и есть чисто текст без цифр
 

Фанат

oncle terrible
Команда форума
вообще, обычно до такой степени c сортировкой не заморачиваются.
если вот прямо очень дозарезу надо, то можно создать отдельное поле, в котором хранить те же строки, но с выровненными цифрами
PHP:
Нагреватель с терморегулятором, ViaAqua 0025
Нагреватель с терморегулятором, ViaAqua 0100
ещё хорошей мыслью будет хранить информацию в трех полях, а не в одном - тип устройства, бренд и модель.
тогда сработает твоя идея с прибавлением нуля
 

Beavis

Banned
Можно попробовать как-нибудь так:
ORDER BY ПолучитьВсёКромеЦифр(str), ПолучитьЦифрыИПривестиКInt(str)
 

Beavis

Banned
Дело Чушкина не дремлет?
проблема как сделать natural sort, это, кстати, не глупый вопрос наподобие того, на которые любит отвечать Чушкин
у многих возникает эта проблема, и нормального решения пока что нет (ну или я не знаю)
если ты его знаешь, поделись пожалуйста
 

Вурдалак

Продвинутый новичок
Решение состоит в отказе от непонятного natural sort. :) Можно добавить поле для ручной сортировки, если требуется что-то особенное.
 

С.

Продвинутый новичок
проблема как сделать natural sort
Проблемы нет, есть natsort(). Предварительная обычная сортировка в SQL и окончательная досортировка в PHP. Не надо стесняться пользоваться PHP, в этом нет ничего постыдного.
 

Beavis

Banned
Проблемы нет, есть natsort(). Предварительная обычная сортировка в SQL и окончательная досортировка в PHP. Не надо стесняться пользоваться PHP, в этом нет ничего постыдного.
Проблема есть, и досортировка в php - это один из способов её решения, который подходит в некоторых случаях, например когда таблица небольшая, и постраничная навигация не требуется.

Решение состоит в отказе от непонятного natural sort. :)
Интересное решение, но оно тоже не всем подойдет))
 

С.

Продвинутый новичок
Постраничная навигация для сортированных списков это полный анахронизм и несуразица. Если есть сортировка, фильтрация, поиск, то страницы можно смело убирать. Если результат укладывается в некое счетное количество (сказжем до нескольких сотен), то выдаются все они сразу. Если результат "несчетный" (многия тыщача), то первые сказчем 100 и все. Если искомого нет в этой сотне, меняй критерии фильтрации.

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

~WR~

Новичок
Эх, в постгресе можно построить индекс по результату регулярного выражения и сортировать по нему.
 
Сверху