我有一个查询从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时,它会在右边排序方式,所以S,M,L,XL,XXL,而不是字母L,M,S,XL,XXL。
怎么做?
答案 0 :(得分:2)
这应该有效:
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
答案 1 :(得分:1)
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
您可以根据需要调整字母数字顺序的数字
答案 2 :(得分:0)
您可以使用CASE
语句执行此操作,但我建议您在“大小”表格中添加SortOrder
列,然后按此排序。
答案 3 :(得分:0)
尝试
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
答案 4 :(得分:0)
尝试按照您想要的顺序指定现有值,如下所示:
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',...)