【发布时间】:2021-07-16 12:43:20
【问题描述】:
我正在构建一个问答平台,人们可以像这里或 Reddit 一样在其中投票/反对。
$questions =
Question::select([
'questions.*',
'users.name AS username'
])
->leftJoin('questions_votes', 'questions_votes.question_id', '=', 'questions.id')
->leftJoin('users', 'users.id', '=', 'questions.user_id')
->groupBy('questions.id')
->get();
通过这个查询,我得到每个问题的总数、创建者的用户名和问题数据本身。
所有投票都存储在questions_votes(列:id, user_id, upvote)中,upvote 可以是 1 表示赞成或 -1 表示反对。
让用户在性能方面对数据进行投票的最佳方法是什么?我应该...
- 在我的
$questions-查询中添加一个额外的子查询来检查该用户的每个问题的upvote列?该子查询在普通 MySQL 中会是什么样子? - 在每个问题的每次迭代中运行一个额外的查询,并检查每个问题的数据记录,如果我作为当前用户已投票/否决它?
【问题讨论】:
-
性能方面,涉及的数据集可能大小,我怀疑它有什么不同
标签: php mysql laravel eloquent query-optimization