У меня есть следующий код:
select
count(restaurants.id) as restaurant_count,
`restaurants`.*,
round(AVG(restaurant_reviews.rate), 1) as rate
from
`restaurants`
inner join `restaurant_reviews` on `restaurant_reviews`.`restaurant_id` = `restaurants`.`id`
group by
`restaurants`.`id`
order by
`restaurant_count` desc
limit
3
Это возвращает мне что-то вроде этого:
restaurant_count, id, name , rate
25 , 12, Restaurant 12, 4.6
22 , 08, Restaurant 08, 4.1
17 , 19, Restaurant 19, 4.4
Это означает, что он возвращает 3 лучших ресторана с наибольшим количеством restaurant_reviews
(количество отзывов отображается в restaurant_count
). Я хотел бы после этого упорядочить эти результаты по скорости в порядке убывания. Пример:
restaurant_count, id, name , rate
25 , 12, Restaurant 12, 4.6
17 , 19, Restaurant 19, 4.4
22 , 08, Restaurant 08, 4.1
Как я мог это сделать? Я написал все в SQL, но конструктор запросов laravel также приветствуется.
Я пробовал просто изменить order by
на:
order by
`restaurant_count` desc,
`rate` desc
limit
3
Но сначала он будет заказывать restaurant_count
, и после этого будут упорядочены только те записи, которые имеют такое же количество restaurant_count
, по ставке. Это означает, что каждый ресторан с самым большим restaurant_count
всегда будет занимать более высокую позицию, независимо от его рейтинга. И это проблема.