2013-08-30 51 views
2

我有一個表項,看起來像這樣的命令:MySQL的命令由另一表的列名

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的排序方式索引ID從附表]的可能重複(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'AND c.column_name!='id'AND 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