Mysql - 按字段中的特定数据排序

时间:2012-01-09 13:33:17

标签: mysql sql-order-by

我正在使用导入数据库的外部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语句中执行此操作?

感谢您的时间。

2 个答案:

答案 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;    

它假定规范字段至少有两个部分分开,并且所有者数量和文本“之前的所有者”之间有一个空格。