Элементы порядка SQL по другому полю таблицы, но в определенном порядке - PullRequest
0 голосов
/ 21 октября 2019

У меня есть 2 таблицы:

  • таблица object:
    • ID
    • title
  • таблица category:
    • ID
    • title
    • object_id

Я хочу задать запрос, чтобы получить порядок объектов по категориям в произвольном порядке, например, первые объекты с идентификатором категории 214, второй 219 и т. Д.

ИЯ делаю этот запрос:

SELECT SQL_CALC_FOUND_ROWS
  object.* 
FROM object
INNER JOIN category
  ON category.object_id = object.ID 
WHERE 1 = 1
GROUP BY object.ID 
ORDER BY
  CASE category.ID 
    WHEN 214 THEN 1 
    WHEN 219 THEN 2 
    WHEN 220 THEN 3 
    WHEN 216 THEN 4 
    WHEN 222 THEN 5 
    WHEN 223 THEN 6 
    WHEN 225 THEN 7 
    WHEN 218 THEN 8 
    WHEN 326 THEN 9 
    WHEN 224 THEN 10 
    WHEN 221 THEN 11 
    WHEN 215 THEN 12 
    WHEN 229 THEN 13 
    WHEN 228 THEN 14 
    WHEN 217 THEN 15 
    WHEN 188 THEN 16 
    WHEN 230 THEN 17 
    WHEN 327 THEN 18 
  END ASC
  , object.title ASC
LIMIT 0, 23

Но это не работает, он возвращает объект, упорядоченный по object.title, но не по category.ID.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Измените ваш заказ на

ORDER BY FIELD(category.ID,214,219,220,216,222,223,225,218,326,224,221,215,229,
  228,217,188,230,327),object.title ASC

Для достижения вашей цели

0 голосов
/ 21 октября 2019

Вы можете добавить поле в таблицу категорий с именем order_number и установить там порядок. А потом просто закажите по order_number. Это также уменьшит ваш запрос и оптимизирует его.

SELECT SQL_CALC_FOUND_ROWS
  object.*
FROM object
INNER JOIN category
  ON category.object_id = object.ID
WHERE 1 = 1
GROUP BY object.ID
ORDER BY category.order_number
  , object.title ASC
LIMIT 0, 23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...