我有一个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