У меня есть таблица MySQL, которую я хочу отсортировать на основе буквенно-цифрового поля, которое в некоторых случаях может перекрываться.Я пробовал несколько запросов, я всегда близко, но не достигаю цели.
Моя таблица:
TABLE
Sizes
COLUMN
ScaleCode varchar(6)
SizeIndex smallint(6)
SizeName varchar(30)
PRIMARY KEY
ScaleCode, SizeIndex
Данные:
+-----------+-----------+----------+
| ScaleCode | SizeIndex | SizeName |
+-----------+-----------+----------+
| 00001 | 1 | 13 |
| 00001 | 2 | 14 |
| 00001 | 3 | 15 |
| 00002 | 1 | 14 |
| 00002 | 2 | 15 |
| 00002 | 3 | 16 |
| 00002 | 4 | 17 |
| 00002 | 5 | 18 |
| 00002 | 6 | 19 |
| 00002 | 7 | 20 |
| 00003 | 1 | 18 |
| 00003 | 2 | 19 |
| 00003 | 3 | 20 |
| 00003 | 4 | 21 |
| 00003 | 5 | 22 |
| 00004 | 1 | ONE_SIZE |
| 00005 | 1 | 2S |
| 00005 | 2 | S |
| 00005 | 3 | M |
| 00005 | 4 | L |
| 00005 | 5 | 2L |
+-----------+-----------+----------+
Моя цельвыполнить выбор для SizeName со следующим результатом:
+----------+
| SizeName |
+----------+
| ONE_SIZE |
| 2S |
| S |
| M |
| L |
| 2L |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
+----------+
Итак, мне нужно перекрывать значения SizeName, показанные только один раз, как, например, для 14 и 15, оба доступны в ScaleCode 00001 и 000002 или 18, 19, 20оба доступны в ScaleCode 00002 и 00003. Хитрость заключается в том, что значения SizeName являются буквенно-цифровыми, поэтому мне нужно поддерживать взаимный порядок внутри одного и того же кода масштаба, то есть «2S» и «2L» должны иметь одинаковый порядок с другими размерами ихсобственный масштаб, а не отсортированный по числу.
То, что я пробовал, это:
SELECT DISTINCT SizeName
FROM Sizes
ORDER BY SizeName, ScaleCode, SizeIndex
, но:
+----------+
| SizeName |
+----------+
| 2L |
| 2S |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| L |
| M |
| ONE_SIZE |
| S |
+----------+
Это не то, что я ожидал, потому что порядок внутри ScaleCode00005 не поддерживается.Итак, я попробовал:
SELECT DISTINCT SizeName
FROM Sizes
ORDER BY SizeName + 0, ScaleCode, SizeIndex
но:
+----------+
| SizeName |
+----------+
| S |
| M |
| L |
| ONE_SIZE |
| 2L |
| 2S |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
+----------+
Что было бы хорошо, если бы только «2L» и «2S» не могли считаться числом.
ОБНОВЛЕНИЕ: ONE_SIZE может быть везде, но не внутри других масштабов.Таким образом, это может быть до или после шкалы «2S, S, M, L, 2L», но не между ними.Мне нужно поддерживать постоянную шкалу.
Заранее спасибо всем, кто хочет мне помочь.