MySQL ORDER BY另一个表的列名

时间:2013-08-30 18:51:04

标签: mysql sql sql-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  

如何强制第一个表上的项目按ORDER BY第二个表格中的大小位置?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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