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

Форум MySQL

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

 

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

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

тема: Сортировка текста
 
 автор: admin   (04.06.2013 в 13:02)   письмо автору
 
 

Доброго времени суток! есть интернет магазин, у каждого товара есть артикул.
(ВК1310221, ВК1310222, ВМ1235412, К4658, РАК79878 и т.д.) сейчас выводится в разброс
подскажите как отсортировать чтобы при выводи товара по артиклу буквы были в алфавитном порядке и цифры по порядку?

  Ответить  
 
 автор: Sfinks   (04.06.2013 в 13:28)   письмо автору
 
   для: admin   (04.06.2013 в 13:02)
 

Если при одинаковых буквах количество цифр всегда одинаковое, т.е. не может быть ВК221 и ВК1310222, то достаточно просто добавить в SQL-запрос
... ORDER BY artikul

Если же такое возможно, то придется изголяться. Покажите ваш SQL-запрос для этого.

  Ответить  
 
 автор: admin   (04.06.2013 в 13:36)   письмо автору
275.5 Кб
 
   для: Sfinks   (04.06.2013 в 13:28)
 

mysql_query("SELECT * FROM img WHERE catalog='$catalog'  ORDER BY id DESC");


прикрепил файл с выводом изображений, тобы вы имели представлние

  Ответить  
 
 автор: Sfinks   (04.06.2013 в 15:29)   письмо автору
 
   для: admin   (04.06.2013 в 13:36)
 

Лучше бы Вы часть дампа таблицы показали.
Ну да ладно. Предположим, что артикул находится в поле artikul.
На уровне БД могу предложить такую сортировку:
SELECT *
FROM( SELECT *, CHAR_LENGTH(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(artikul
                ,'0','')
                ,'1','')
                ,'2','')
                ,'3','')
                ,'4','')
                ,'5','')
                ,'6','')
                ,'7','')
                ,'8','')
                ,'9',''))l FROM tbl )t
ORDER BY left(artikul,l),cast(substr(artikul,l+1) as unsigned)

Если нет - то придется сортировать в PHP. Но сомневаюсь, что это будет быстрее.

  Ответить  
 
 автор: Sfinks   (04.06.2013 в 15:39)   письмо автору
 
   для: Sfinks   (04.06.2013 в 15:29)
 

PS. Но, если для Вас принципиально, чтобы сортировалось именно так:
BM121025
BM121035
BM131034
BM1110019
BM1110087
, а вот так:
BM1110019
BM1110087
BM121025
BM121035
BM131034
не приемлемо, то правильнее, конечно, хранить артикул в 2ух полях: в одном буквенную часть, в другом цифровую.

  Ответить  
 
 автор: admin   (04.06.2013 в 15:51)   письмо автору
 
   для: Sfinks   (04.06.2013 в 15:39)
 

спасибо, сейчас попробую!

  Ответить  
Rambler's Top100
вверх

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