К сожалению, ответ Джейкоба не гарантируется, независимо от того, что говорится в ссылке.Проблема в том, что MySQL не гарантирует порядок вычисления выражений в SELECT
.Следовательно, вам не следует присваивать переменную в одном выражении, а затем использовать ее в другом.Поведение может измениться.
Кроме того, более поздние версии MySQL более требовательны при использовании переменных с group by
и order by
, поэтому требуется дополнительный подзапрос.
Запрос выполняетне нужно group by
.Вы должны делать это с order by
:
select n.id, n.title
from (select n.*,
(@rn := if(@c = category_id, @rn + 1,
if(@c := category_id, 1, 1)
)
) as rn
from (select n.*
from news n
order by n.category_id, n.id desc, n.title
) n cross join
(select @rn := 0, @c := -1) params
) n
where n.rn <= 3;