Mysql 如何排序此查询
我有一个从mysql数据库中获取产品的查询。是这样的:Mysql 如何排序此查询,mysql,sql,Mysql,Sql,我有一个从mysql数据库中获取产品的查询。是这样的: SELECT p.name, p.description, p.price, ps.sizename FROM products p JOIN product_sizes ps ON ps.id = p.size_id 该查询获取的sizename可以是S、M、L等,也可以是38、39、40等 我现在想要的是,对于这个查询,是按sizename排序,但排序的方式是,当大小是数字时,它排序是数字的,但当它像s,M,L时,它以正确的方式排序
SELECT p.name, p.description, p.price, ps.sizename
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
该查询获取的sizename可以是S、M、L等,也可以是38、39、40等
我现在想要的是,对于这个查询,是按sizename排序,但排序的方式是,当大小是数字时,它排序是数字的,但当它像s,M,L时,它以正确的方式排序,所以s,M,L,XL,XXL,而不是字母顺序的L,M,s,XL,XXL
如何做到这一点?您可以使用
CASE
语句来实现,但我建议您在尺寸表中添加排序器
列,并按此进行排序
order by case when ps.sizename in (38,39,40)
then ps.sizename
when ps.sizename = 'XS'
then 1
when ps.sizename = 'S'
then 2
when ps.sizename = 'M'
then 3
when ps.sizename = 'L'
then 4
when ps.sizename = 'XL'
then 5
when ps.sizename = 'XXL'
then 6
end
您可以根据需要调整字母数字顺序的数字试试看
ORDER BY
CASE WHEN sizename='S' THEN 38
WHEN sizename='M' THEN 39
WHEN sizename='L' THEN 40
WHEN sizename='XL' THEN 42
WHEN sizename='XXL' THEN 44
WHEN sizename REGEXP ('[0-9]') THEN sizename
END
尝试按所需顺序指定现有值,类似于:
SELECT p.name, p.description, p.price, ps.sizename
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
ORDER BY FIELD(ps.sizename,'S','M','L','XL','XXL',...)
这应该起作用:
SELECT p.name, p.description, p.price, ps.sizename
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
order by case when CONVERT(sizename, SIGNED INTEGER) IS NOT NULL
THEN CONVERT(sizename, SIGNED INTEGER)
ELSE -CAST(-1 AS UNSIGNED) END ASC
, case sizename WHEN 'S' THEN 1
WHEN 'M' THEN 2
WHEN 'L' THEN 3
WHEN 'XL' THEN 4
WHEN 'XXL' THEN 5 END ASC
, sizename ASC
这里有一把小提琴:好的,这看起来很有希望。我一回家就要测试一下。