我有一个表stats像这样:

id | post_id | num_yes | num_no
1  | 1       | 2       | 0
2  | 1       | 3       | 3
3  | 1       | 1       | 0

如何按num_yes - num_no的差异排序?输出应为1, 3, 2(就id而言)。

我目前有这个:
$posts = Post::join('stats', 'stats.id', '=', 'posts.id')
    ->where('post_id', 1)
    ->orderByRaw('MAX(stats.num_yes - stats.num_no)', 'DESC')
    ->get();

但这是行不通的。我怎样才能解决这个问题?

最佳答案

您按MAX(stats.num_yes - stats.num_no)排序,这将为您提供这些列(跨所有行)之间的差异的最大值。您真的只想按每行这些列之间的差排序:

$posts = Post::join('stats', 'stats.id', '=', 'posts.id')
    ->where('post_id', 1)
    ->orderByRaw('(stats.num_yes - stats.num_no)', 'DESC')
    ->get();

关于laravel - Eloquent :按最大差异排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36227332/

10-15 08:05