Сортировка идентификатора таблицы по дефису (PHP / MySQL)

0

У меня есть таблица MySQL, которую я хотел бы отображать уменьшающимся образом. Проблема в том, что идентификатор разбит тире... Поэтому MySQL не понимает мой запрос.

SELECT * FROM table WHERE id ORDER BY id DESC

Результаты

20633-18489
184945-190028
183661-188782
1575-1610

но я хочу этот заказ

184945-190028
183661-188782
20633-18489
1575-1610

Что такое решение в php?

Теги:

2 ответа

0
Лучший ответ

В инструкции SQL мы могли бы сделать это:

 ORDER BY id + 0 DESC

или это:

 ORDER BY SUBSTRING_INDEX(id,'-',1) + 0 DESC

" + 0 " будет вызывать строку перед ее вычислением в числовом контексте. Это вернет число. И тогда упорядочение будет по числовому значению.


В качестве демонстрации

SELECT t.id
     , t.id + 0 AS id0
     , SUBSTRING_INDEX(t.id,'-',1)+0 AS id1
  FROM ( SELECT '184945-190028' AS id
         UNION ALL SELECT '183661-188782'
         UNION ALL SELECT '20633-18489'
         UNION ALL SELECT '1575-1610'
       ) t
 ORDER BY t.id + 0  DESC

возвращается

id                id0     id1
-------------  ------  ------
184945-190028  184945  184945
183661-188782  183661  183661
20633-18489     20633   20633
1575-1610        1575    1575

Примечание: это заказ только со стороны id перед тире. Это не указывает, какие значения идентификатора заказа, которые "соответствуют" в главной части будут возвращены. MySQL будет иметь право возвращать эти два в любом порядке.

456-42
456-321

Мы можем добавить больше выражений в предложение ORDER BY, чтобы сделать порядок этих детерминированных.

0

То, что вы ищете, - это REPLACE()

поэтому ваш запрос будет выглядеть так:

SELECT *,  REPLACE(id, '-' , '') AS sortable_id  WHERE id ORDER BY sortable_id DESC
  • 0
    Это будет порядок по символьным ( строковым ) значениям и не будет соответствовать спецификации OP.
  • 0
    @ spencer7593 Я не вижу ничего о требовании в исходном вопросе. Я не уверен, что преобразование из строки в целое число перед сортировкой происходит быстрее, чем сортировка по строковым значениям. Можете ли вы уточнить, что не так с моим ответом / рассуждением [я хотел бы знать, чтобы улучшить]
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню