我正在使用导入数据库的外部CSV产品Feed,每行的结果会在比较表中显示给最终用户。
特定列包含许多我希望独立排序的详细信息。无法更改Feed /表结构。
db feed表的示例:
MODEL | SPECIFICATIONS | AGE
Car 1A | 1000 miles recorded, 10 previous owners, No tax included | 3 years
Car 1B | 1000 miles recorded, 5 previous owners, No tax included | 5 years
Car 1C | 6000 miles recorded, 7 previous owners, No tax included | 5 years
Bike 1D | 3000 miles recorded, 5 previous owners, 100 tax included | 4 years
目前我的mysql_query使用'ORDER BY模型'语句。
我想显示比较表,按照“规格”栏中“先前所有者”的数量排序。
有没有办法在ORDER BY语句中执行此操作?
感谢您的时间。
答案 0 :(得分:1)
是的,但它相当复杂和脆弱 - 因此first rule of database normalization。
像......那样的东西。
ORDER BY CAST (
SUBSTR(specifications
, LOCATE(', ', specifications)
, LOCATE(' ', specifications, LOCATE(', ', specifications)+2)
)
) AS INT;
将在','和随后的''。
之间找到字符串但如果格式不完全符合您的示例,您将获得不寻常的结果。
答案 1 :(得分:1)
我在虚拟MySQL
数据库中测试了您的表设置,并提出了以下解决方案。
SELECT *, CAST(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(specifications, ',', -2), ' ', 2)) as unsigned integer) as previousowners
FROM dbfeed
ORDER BY previousowners;
它假定规范字段至少有两个部分分开,并且所有者数量和文本“之前的所有者”之间有一个空格。