MySQL порядок по целому и varchar - PullRequest
3 голосов
/ 22 октября 2010

Я получил поле с размерами (VARCHAR).Размеры могут иметь значения типа int и string, например (1, 2, 3-4, X, XL, M, ...).

Когда я использую нормальный порядок по функции mysql, на выходе получаетсяследующие: 1,10,11,2, 44-46, L, M, S, XL, XXL

Значения, которые не содержат числа, сортируются так, как я хочу это сделать.(Я знаю, что значения отсортированы в виде строки и результат правильный).Но я хочу заказать такие значения: 1, 2, 3, 3-4, L, M, S, XL, XXL

Также более «логичный» порядок.

Естьэто возможно с msql?

1 Ответ

1 голос
/ 22 октября 2010

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

CREATE TABLE sizes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  ord INT,
  name VARCHAR(8)
);

И в тех таблицах, где вы ранее использовали размеры, вы должны использовать size_id:

CREATE TABLE tshirts (
  id INT PRIMARY KEY AUTO_INCREMENT,
  colour VARCHAR(16),
  price INT,
  size_id INT
);

И когда вы запрашиваете, вы присоединяетесьэто с размерами, упорядочить по size.ord и отображать размеры. name для пользователя следующим образом:

SELECT colour, price, sizes.name FROM tshirts
  JOIN sizes ON tshirts.size_id = sizes.id
  ORDER BY sizes.ord;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...