Mysql - порядок по конкретным данным в поле - PullRequest
1 голос
/ 09 января 2012

Я работаю с внешним фидом продуктов CSV, который импортируется в базу данных, результаты каждой строки отображаются для конечного пользователя в таблице сравнения.

В конкретном столбце содержатся многочисленные детали, которые я хочу отсортировать самостоятельно. Структура подачи / таблицы не может быть изменена.

Пример таблицы подачи БД:

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 model.

Я хотел бы отобразить таблицу сравнения, отсортированную по количеству «предыдущих владельцев» в столбце «ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ».

Есть ли способ сделать это в операторе ORDER BY?

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 09 января 2012

Я проверил настройку вашей таблицы в фиктивной базе данных MySQL и нашел следующее решение.

SELECT *, CAST(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(specifications, ',', -2), ' ', 2)) as unsigned integer) as previousowners  
FROM dbfeed    
ORDER BY previousowners;    

Предполагается, что поле спецификаций имеет по крайней мере два раздела, разделенных и что между числом владельцев и текстом «предыдущие владельцы» есть пробел.

1 голос
/ 09 января 2012

Да, но это довольно сложно и хрупко - отсюда первое правило нормализации базы данных .

Что-то вроде ....

ORDER BY CAST (
    SUBSTR(specifications
    , LOCATE(', ', specifications)
    , LOCATE(' ', specifications, LOCATE(', ', specifications)+2)
    )
) AS INT;

НайдетСтрока между ',' и последующим ''.

Но вы получите необычные результаты, если формат не совсем соответствует вашим примерам.

...