У меня 4 таблицы, как это
Вопрос [id, review_id, оценка]
логика приложения => для каждого ресторана люди могут дать обзор, в обзоре есть несколько вопросов, вопросы будут всегда same-, как, как был вкус, доставка и т.д. люди дали бы оценку по этим вопросам.
на словах, пользователи дают отзывы о ресторанах по некоторым вопросам
Теперь в своем веб-приложении я хочу показать там список ресторанов со своим "Question table score average"
.
Я использую laravel. Помогло бы также создание запросов на запрос. Я хотел бы иметь вычисленное поле как среднее значение с данными общих ресторанов.
Вам не нужно ничего, кроме стандартного INNER JOIN из этих четырех таблиц:
SELECT rs.name, avg(qt.score)
FROM Restaurant rs
JOIN Review rv ( rv.restaurant_id = rs.id )
JOIN User ur ( ur.id = rv.user_id )
JOIN Question qt ON ( qt.review_id = rv.id )
GROUP BY rs.name
ORDER BY avg(qt.score) desc, rs.name;
Теорию можно объяснить следующим образом:
все отзывы организованы для ресторанов
мы обеспокоены пользователями, которые находятся в отзывах о ресторанах
все отзывы содержат в себе вопросы.