2013-08-30 20 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