【问题标题】:4 table join and finding the average of a column4 表连接并求一列的平均值
【发布时间】:2018-07-05 18:47:14
【问题描述】:

我有 4 张这样的桌子

  • 用户 [id, name, .....]
  • 餐厅 [id, name, .....]
  • 评论 [restaurant_id, user_id]
  • 问题 [id, review_id, score]

    应用逻辑=> 对于每个人都可以给评论的餐馆,评论有一些问题, 问题总是一样的——比如味道如何,交付等。人们会在这些问题上打分。

简而言之,用户针对某些问题对餐厅进行评论

现在在我的网络应用程序中,我想在那里显示带有"Question table's score average" 的餐厅列表。

我正在使用 laravel。雄辩的查询构建器也会有所帮助。 我希望有一个计算字段作为带有餐厅总数数据的 average_rating。

【问题讨论】:

  • 你需要用sql查询还是用Eloquent查询?
  • 任何实际上都会有所帮助
  • mysql 具体

标签: mysql sql join


【解决方案1】:

您只需要在这四个表中进行标准的 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;

这个理论可以解释为:

  • 所有评论都安排在餐厅

  • 我们担心用户评论关于餐厅

  • 所有评论都包含问题

【讨论】:

  • 好的,我正在尝试。为什么上面的查询应该工作?你能解释一下集合论或任何进入 sql 的东西吗
  • 不分组,只提供第一家餐厅
  • 嘿@Barbaros,谢谢,你知道所有评论的问题都是一样的,不会有问题吗????
  • 也谢谢你,使用average 解决不了问题,我们需要Question 表的score 列。
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多