4 таблицы соединения и нахождения среднего столбца - PullRequest
0 голосов
/ 05 июля 2018

У меня есть 4 таблицы, как это

  • Пользователь [id, name, .....]
  • Ресторан [id, name, .....]
  • Отзыв [restaurant_id, user_id]
  • Вопрос [id, review_id, оценка]

    логика приложения => для каждого ресторана люди могут дать обзор, у обзора есть несколько вопросов, вопросы всегда будут одинаковыми - например, каков был вкус, доставка и т. д. люди будут давать оценку по этим вопросам.

словами, пользователи дают отзывы о ресторанах на некоторые вопросы

Теперь в моем веб-приложении я хочу показать список ресторанов с "Question table's score average".

Я использую Laravel. Eloquent построитель запросов тоже поможет. Я хотел бы, чтобы вычисляемое поле было средним_рейтингом с общими данными ресторанов.

1 Ответ

0 голосов
/ 05 июля 2018

Вам не нужно ничего, кроме стандартного ВНУТРЕННЕГО СОЕДИНЕНИЯ среди этих четырех таблиц:

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;

Теория может быть объяснена как:

  • все отзывы предназначены для ресторанов

  • нас интересуют пользователей , которые находятся в отзывах о ресторанах

  • все отзывы содержат вопросов в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...