У меня есть 2 таблицы:
object
ID
title
category
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.
object.title
category.ID
Измените ваш заказ на
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
Для достижения вашей цели
Вы можете добавить поле в таблицу категорий с именем order_number и установить там порядок. А потом просто закажите по 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