请我想知道,是否有可能在sql中的顺序查询结果在不同的格式比标准的字母数字顺序的列。例如,考虑表“table”,样品表下面的脚本将根据“color”列按字母顺序排列表格:
SELECT * FROM Table ORDER BY Color;
我怎样才能把颜色顺序定为绿色,蓝色,红色?也就是说,如何使用我定义的订单格式进行订购?
sbtkgmzw1#
使用mysql时:
ORDER BY FIELD(Color,'GREEN','BLUE,'RED') ASC
文档:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field请注意,如果第一个参数的值在后面的参数中根本不存在,或者当它为null时,字段(..)的值将计算为0。因此,如果这些案例中有任何一个属于可能性,那么你需要格外小心,否则这些将是最好的结果。因此,在这种情况下,我个人会以相反的顺序提供所需的顺序,并使用desc,例如在您的情况下:
ORDER BY FIELD(Color,'RED','BLUE,'GREEN') DESC
r3i60tvu2#
订购人 FIELD 对于mysql中的情况,这可能是最好的即时解决方案。但一个可能的长期解决方案是添加另一个表,该表根据颜色保持排序顺序,例如。 TableColor :
FIELD
TableColor
Color | Position GREEN | 1 BLUE | 2 RED | 3
然后,您只需将此表联接到当前表即可使用它进行排序:
SELECT t1.* FROM yourTable t1 INNER JOIN TableColor t2 ON t1.Color = t2.Color ORDER BY t2.Position;
这种方法的优点是,如果你有几十种不同的颜色,它的伸缩性很好。在这种情况下,一个 FIELD 表情,或者更糟的是,一个 CASE 表达式,将不能很好地扩展,可能很难保持。
CASE
gcuhipw93#
你可以用 CASE :
SELECT * FROM Table ORDER BY CASE Color WHEN 'GREEN' THEN 1 WHEN 'BLUE' THEN 2 ELSE 3 END;
3条答案
按热度按时间sbtkgmzw1#
使用mysql时:
文档:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field
请注意,如果第一个参数的值在后面的参数中根本不存在,或者当它为null时,字段(..)的值将计算为0。因此,如果这些案例中有任何一个属于可能性,那么你需要格外小心,否则这些将是最好的结果。因此,在这种情况下,我个人会以相反的顺序提供所需的顺序,并使用desc,例如在您的情况下:
r3i60tvu2#
订购人
FIELD
对于mysql中的情况,这可能是最好的即时解决方案。但一个可能的长期解决方案是添加另一个表,该表根据颜色保持排序顺序,例如。TableColor
:然后,您只需将此表联接到当前表即可使用它进行排序:
这种方法的优点是,如果你有几十种不同的颜色,它的伸缩性很好。在这种情况下,一个
FIELD
表情,或者更糟的是,一个CASE
表达式,将不能很好地扩展,可能很难保持。gcuhipw93#
你可以用
CASE
: