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

  • Автор темы Автор темы Murder
  • Дата начала Дата начала

Murder

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

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

приведи пример реальных заголовков и напиши, почему тебя такая сортировка не устраивает
 
ну к примеру:
*Нагреватель с терморегулятором, ViaAqua 25*
*Нагреватель с терморегулятором, ViaAqua 50*
*Нагреватель с терморегулятором, ViaAqua 100*
*Нагреватель с терморегулятором, ViaAqua 200*
нужно что бы оно шло по порядку как написано это в одной из категорий, есть такие же но другим текстом и есть чисто текст без цифр
 
вообще, обычно до такой степени c сортировкой не заморачиваются.
если вот прямо очень дозарезу надо, то можно создать отдельное поле, в котором хранить те же строки, но с выровненными цифрами
PHP:
Нагреватель с терморегулятором, ViaAqua 0025
Нагреватель с терморегулятором, ViaAqua 0100
ещё хорошей мыслью будет хранить информацию в трех полях, а не в одном - тип устройства, бренд и модель.
тогда сработает твоя идея с прибавлением нуля
 
Можно попробовать как-нибудь так:
ORDER BY ПолучитьВсёКромеЦифр(str), ПолучитьЦифрыИПривестиКInt(str)
 
Дело Чушкина не дремлет?

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

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

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