2013-08-30 4 views
2

У меня есть одна таблица с деталями для заказа, который выглядит следующим образом:MySQL ORDER BY имена столбцов таблицы Другой

Product | Color | Size | Size Range ID (from a different, joined table) 
----------------------------------------------------------------------- 
Shirt | Blue | L | 1 
Shirt | Blue | M | 1 
Shirt | Blue | S | 1 

Обратите внимание, что размеры сортируются в алфавитном порядке, в таблице выше.

Я также имею размер в диапазоне таблицы, выглядит следующим образом:

id | size_01 | size_02 | size_03 
-------------------------------- 
1 | S | M  | L 

Как я могу заставить предметы первой таблицы упорядочивать по положению размера второй таблицы?

+0

возможно дубликат [Заказ MySQL с помощью индекса идентификатор из отдельной таблицы] (HTTP://stackoverflow.com/questions/18539237/mysql-ordering-by-index-id-from-separate-table) – Barmar

+1

Вы можете просто 'ORDER BY Size DESC', но это может быть недостаточно общим, если вы добавляете новые размеры. –

ответ

1

Вы можете использовать join объединить таблицы, а затем field() получить позицию в списке столбцов:

select i.* 
from items i left outer join 
    SizeRange sr 
    on i.SizeRangeId = sr.SizeRangeId 
order by field(i.Size, sr.size_01, sr.size_02, sr.size_03) 
+0

Кроме того, чтобы получить размеры из столбца size_range, мы будем использовать что-то вроде: SELECT c.column_name FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.table_name = 'size_ranges' И c.column_name! = 'Id' И c.column_name ! = 'name' ORDER BY c.column_name Таким образом, количество размеров можно менять на лету – user2030173

0
SELECT 
    MAX(CASE Size WHEN 'S' THEN Size ELSE '' END) AS 'size_01', 
    MAX(CASE Size WHEN 'L' THEN Size ELSE '' END) AS 'size_02', 
    MAX(CASE Size WHEN 'M' THEN Size ELSE '' END) AS 'size_03' 
FROM Test 
GROUP BY Product 
Смежные вопросы