Допустим, у меня есть таблица Parent и другая таблица Child. Дочерняя таблица имеет parent_id и описание. Я хотел бы сделать запрос, в котором мы получаем родительские объекты и упорядочиваем их по описанию. ОДНАКО, если есть более двух дочерних объектов, я хочу, чтобы они шли после других объектов. Возможно ли это с оператором case?
Если это поможет, я использую mysqli с PHP.






Возможно, для этого нам не нужен оператор case.
select *
from parent p
order by
(select count(*)
from child c
where p.parent_id = c.parent_id)
если вы хотите отделить 2 и меньше от более чем 2, это может быть так
select *
from parent p
where
(select count(*)
from child c
where c.parent_id = p.parent_id) <= 2
order by p.description
union
select *
from parent p
where
(select count(*)
from child c
where c.parent_id = p.parent_id) > 2
order by p.description
Используйте подзапрос для сбора счетчика, затем выберите из него:
select columns
from (
select p.columns, count(c.parent_id) as childcount
from parent p
join child c on c.parent_id = p.id
group by p.columns
) subquery
order by childcount > 2, description
Хитрость здесь в том, что childcount > 2 который в MySQL равен 0, если ложь, и 1, если правда, поэтому более 2 дочерних родителей появятся после всех родителей с 2 или менее, и в каждой группе результатов родители сортируются по описанию.
Обратите внимание, что columns означает список столбцов в parent, которые вы хотите вернуть из своего запроса.