如何按最后一个字母(产品id的模型类型)从我的数据库中排序他的列


How to sort his column from my database by the last letter (model type of product id)?

我有一个mySQL数据库中的产品列表。其中一列是模型的名称。

model_name

Corgi II B
Corgi II A
Renoir III C
Renoir III A
LaCost II
Playmouth II B
Playmouth II D
Playmouth II A
Playmouth II C
Dublin II

如果存在,我如何按模型标识符(如"A"或"B")排序?它们都在网站上以3列网格模式显示。我的网站是基于PHP的

我同意Mark的观点,您应该为他所说的model_key添加一列。如果你不能,那么这将得到你想要的:

SELECT model_name 
FROM products 
ORDER BY 
    CASE 
        WHEN SUBSTRING_INDEX(model_name,' ',1) != SUBSTRING_INDEX(model_name,' ',2)
        THEN SUBSTRING_INDEX(model_name,' ',-1)
        ELSE NULL
    END;

如果您想在model_name上进行二次排序:

SELECT model_name 
FROM products 
ORDER BY
    CASE 
        WHEN SUBSTRING_INDEX(model_name,' ',1) != SUBSTRING_INDEX(model_name,' ',2)
        THEN SUBSTRING_INDEX(model_name,' ',-1)
        ELSE NULL
    END,
    model_name;

好的,从我能理解的,你的字段名'model_name'包含一个字符串与一个示例值'Corgi II B',你想排序这些值的字符串的最后一个字符按字母顺序。

解决这个问题的唯一合乎逻辑的方法,不建议一个可能返回错误信息的编码工作,将创建一个新的字段,称之为'model_key',并把' a '或'B'或任何字符在该字段,然后你可以添加:

$sql = SQL HERE . ' ORDER BY model_key ASC';

在WHERE子句后面,假设有一个

尝试获取字符串的最后一个字符并按其排序

除非你有一个模型标识符列表,这是最接近你将得到排序。如果你能澄清有一个或张贴它将是什么,那么我可以相应地调整我的查询

SELECT 
    model_name 
FROM products  -- you said a products table so i assume its called products.
ORDER BY  RIGHT(model_name,1);

演示
编辑:

更详细的订单,以确保其正确的顺序。

SELECT model_name 
FROM products
ORDER BY 
    (LENGTH(model_name) - LENGTH(REPLACE(model_name, ' ', ''))) DESC, 
    RIGHT(model_name, 1);

或者如果你想按那些有标识符的排序,也是按升序排列…

SELECT model_name 
FROM products
ORDER BY 
    (LENGTH(model_name) - LENGTH(REPLACE(model_name, ' ', ''))) DESC, 
    RIGHT(model_name, 1);

另一种订购先有模型的副产品的方法是使用REGEXP

SELECT 
    model_name
FROM products
    ORDER BY model_name REGEXP '^[a-z]+ [a-z]+ [a-z]+$' DESC,
    SUBSTRING_INDEX(model_name,' ',-1),
    model_name