Заказ АА перед А - PullRequest
       4

Заказ АА перед А

6 голосов
/ 14 июля 2011

Я делаю сайт электронной коммерции для клиента, который продает нижнее белье, я написал для них подборщик размера бюстгальтера, но они вернулись ко мне сегодня с небольшой проблемой.

С размерами бюстгальтера, AA меньше, чем A, поэтому он должен отображаться до этого на графике, но когда я использую порядок MySQL по размеру, очевидно, он ставит сначала A, затем AA, затем B и т. Д.

Есть ли простой способ заставить MySQL сначала заказать AA, затем A, B и т. Д.?

Ответы [ 6 ]

4 голосов
/ 14 июля 2011

Я бы добавил еще один столбец "orderid" (INTEGER или даже TINYINT) к вашей таблице и упорядочил бы по этому столбцу.

3 голосов
/ 14 июля 2011

Предполагая, что A является единственной возможной повторяющейся буквой, вы можете сделать это:

SELECT  *
FROM    bra
ORDER BY
        LENGTH(size) DESC, size

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

Вы можете использовать его для построения графиков конверсии и отображения размеров в предпочтительной системе человека.

1 голос
/ 14 июля 2011

Поместите ли и подчеркните перед "A", чтобы "_A" работало и было бы приемлемым, вы могли бы убрать его для демонстрации?(Не уверен, сработает ли это или нет)

В качестве альтернативы, есть код сортировки, отдельный от поля размера бюстгальтера для сортировки.

0 голосов
/ 14 июля 2011

Создать таблицу подстановки для заказа

Table bra_order
id integer auto_increment not null
bra_size char(3)
sort_id integer not null

Затем сделайте что-то вроде:

SELECT i.* FROM inventory
LEFT JOIN bra_order b ON (b.bra_size = i.bra_size)
ORDER BY b.sort_id
0 голосов
/ 14 июля 2011

Я бы предпочел ввести столбец sequenceNo для хранения заказа на сервере.Представьте себе других сборщиков

  • XS
  • S
  • M
  • L
  • XL
  • ...
0 голосов
/ 14 июля 2011

Вы можете заказать по значению, полученному из столбца. Вы можете использовать случай оператор для указания заказа: ...

источник

это будет ваш выбор:

select id, val 
from test 
order by 
case val
 when 'AA' then 1
 when 'A' then 2
 when 'B' then 3
END

сначала сортирует AA, затем A, затем B:)

...