Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Сортировка товаров 1 10 100


Recommended Posts

Помогите с настройкой сортировки товаров. Сейчас товары сортируются по модели от Я до А получается  PL16  PL15  PL14............ Товары с наименованием модели PL102  PL101  PL100 сортируются не корректно получается порядок PL12  PL102  PL101  PL100  PL10  PL9 до 99 все нормально было пока не пошли товары с моделью номером выше 99.  

 

В базе данных в структуре у строки model стоит varchar символьное значение, может нужно какое другое установить или это в php коде правится? Не пойму как, что и где настроить на желаемое отображение.  

Надіслати
Поділитися на інших сайтах


на примере демо товаров

order by model

Товар 1
Товар 11
Товар 14
Товар 15
Товар 16
Товар 17
Товар 18
Товар 19
Товар 2
Товар 20

 

 

способ выше, хотя можно упростить CONVERT(model, UNSIGNED INTEGER)

Товар 1
Товар 2
Товар 3
Товар 4
Товар 5
Товар 6
Товар 7
Товар 8
Товар 9
Товар 11

 

Надіслати
Поділитися на інших сайтах

  • 4 weeks later...

Столкнулся с той же проблемой, запрос , результат не дал к сожалению...версия 1.5.4.1  товарищ фрилансер, помогите советом

SELECT *, CONVERT(SUBSTRING(model,2),UNSIGNED INTEGER) AS num
FROM product
ORDER BY num;
Надіслати
Поділитися на інших сайтах


  • 2 months later...

У меня что-то тоже не работает этот способ. MySQL 5.5.34.

Ни `CAST()`, ни `CONVERT()`, ни `*1`. Ни с DECIMAL(10,2), ни UNSIGNED.

Ни с русскими, ни с латинскими названиями товаров.

Во всех случаях результат преобразований оказывается равен 0 (0.00).

Я поле `name` использовал, а не `model`, но это несущественно. Всякие COLLATE и CHARSET - обычные для опенкарт, на его базе пробовал запросы.

Пока не подсунешь функции преобразования что-то вроде `substring_index(name,' ',-1)`, т.е. строку, начинающуюся с цифр, кроме нуля в столбце с конвертированными названиями товаров только нули. В общем, любые символы перед цифрами -- мешают, а не отбрасываются.

Надіслати
Поділитися на інших сайтах


хотя можно упростить CONVERT(model, UNSIGNED INTEGER)

Повторю, не работает:

Ни `CAST()`, ни `CONVERT()`, ни `*1`. Ни с DECIMAL(10,2), ни UNSIGNED.

Я с этим около часа экспериментировал, наигрался по самые гланды. Итоговый вывод: буквы таки мешают. Хотя мне казалось, что всё кроме чисел должно попросту игнорироваться в результате этих преобразований. Но не игнорируется, а приводит к результату "0" и ничего не сортирует, разумеется.

 




order by model+0

Подозреваю. что "+0" ничем не лучше "*1" (см. выше), но ок, попробую на всякий случай. UPD: да, ничем не лучше.

post-10112-0-99534500-1399911088_thumb.pngpost-10112-0-83251500-1399911102_thumb.pngpost-10112-0-10682400-1399911115_thumb.pngpost-10112-0-46966200-1399911128_thumb.pngpost-10112-0-06886000-1399911143_thumb.pngpost-10112-0-21027700-1399911157_thumb.png

Змінено користувачем rb2
добавил картинок
Надіслати
Поділитися на інших сайтах


Подозреваю. что "+0" ничем не лучше "*1" (см. выше), но ок, попробую на всякий случай.

Извиняюсь, не увидел. Но у меня, что *1, что +0 работает.

Надіслати
Поділитися на інших сайтах

И у @freelancer, похоже, работает. Вот я и пытаюсь понять, что именно в версиях или настройках может на это влиять. Потому что я в этом топике явно не первый, у кого не работает.

Версию MySQL писал (5.5.34, если не ошибаюсь). Остальное - обычная демо-база от опенкарт 1.5.6 (MyISAM, collation=utf8_general_ci), куда добавил товаров с русскими символами (товар 1, 2, 14).

Надіслати
Поділитися на інших сайтах


И у @freelancer, похоже, работает. 

 

Еще раз посмотрел. У меня совпали для запроса идеальные условия сортировки. Выше указанное мной решение естественно не работает (((

 

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

Надіслати
Поділитися на інших сайтах

try this

SELECT name, CONVERT(SUBSTRING_INDEX(name,' ',-1),UNSIGNED INTEGER) AS num
FROM oc_product_description
ORDER BY num desc

Wh3XVSw.png

 

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

Змінено користувачем freelancer
Надіслати
Поділитися на інших сайтах

try this

Э-э-э... Мои сообщения вообще видно? :)

Я же писал, что это единственное найденное решение. Но для реальной жизни непригодное, к сожалению, т.к. нет никакой гарантии, что искомые цифры будут в конце строки. Или что не будет буквенного префикса (как у топик-стартера, кстати говоря).

В итоге я вижу -- и у @ravilr, и у @freelancer всё точно так же, как у меня работает. В смысле не работает. У @ravilr просто набор тестовых данных неудачный, а у @freelancer в последнем сообщении топика видно, что "HP LP3065" стабильно транслируется в ноль, а значит написанное выше

на примере демо товаров

order by model

...

способ выше, хотя можно упростить CONVERT(model, UNSIGNED INTEGER)

Товар 1

...

Товар 9

Товар 10

просто-напросто не тестировалось на тех данных (Товар 1 - Товар 20), а было написано исходя из предположений о работе этой функии. Увы.
Надіслати
Поділитися на інших сайтах


ravilr сказал(а) 12 Май 2014 - 8:12 PM:

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

Это да. Но это уже означает, что сортировку придётся выносить из MySQL и делать её средствами PHP. Та ещё радость. Боюсь, тут уже простого ответа на вопрос "как исправить сортировку в опенкарт", не получится - и дописать придётся немало, и продумать последствия изменений.
Надіслати
Поділитися на інших сайтах


Это да. Но это уже означает, что сортировку придётся выносить из MySQL и делать её средствами PHP.

я имел ввиду строковые функции mysql

Если знаем кол-во цифр справа, то по ним и сортируем.

select * from oc_product order by right(model,2)

Надіслати
Поділитися на інших сайтах

При convert и кучи товаров этот запрос будет очень тормозной, так как ему придется перебрать все товары.

Это скорее костыль для сайтов у которых мало товаров и мало посетителей.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.