Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分页前的多维groupBy和orderBy-Laravel 5_Php_Mysql_Laravel_Pagination_Group By - Fatal编程技术网

Php 分页前的多维groupBy和orderBy-Laravel 5

Php 分页前的多维groupBy和orderBy-Laravel 5,php,mysql,laravel,pagination,group-by,Php,Mysql,Laravel,Pagination,Group By,我想做的是将用户写的评论与相同主题进行分组,并获取最新的评论。我尝试使用Comment::where->orderBy->groupBy,但它并没有像预期的那样返回数据 这是我的数据库: | id | receiver_id | sender_id | title | body | created_at | | 13 | 2 | 5 | Art | DD | 12.30... | | 12 | 2 | 5 |

我想做的是将用户写的评论与相同主题进行分组,并获取最新的评论。我尝试使用Comment::where->orderBy->groupBy,但它并没有像预期的那样返回数据

这是我的数据库:

| id | receiver_id | sender_id | title | body | created_at |
| 13 |      2      |     5     |  Art  |  DD  |   12.30... |
| 12 |      2      |     5     |  Art  |  CC  |   12.20... |
| 11 |      2      |     5     |  Art  |  BB  |   12.10... |
| 10 |      2      |     5     |  Art  |  AA  |   12.00... |

| 9  |      2      |     3     |  Msc  |  XX  |   11.30... |
| 8  |      2      |     3     |  Msc  |  YY  |   11.20... |
| 7  |      2      |     3     |  Msc  |  ZZ  |   11.10... |

| 6  |      2      |     2     |  Foo  |  UU  |   10.40... |
| 5  |      2      |     2     |  Foo  |  II  |   10.30... |

| 4  |      2      |     2     |  You  |  QQ  |   10.20... |
| 3  |      2      |     2     |  You  |  WW  |   10.10... |

| 2  |      2      |     3     |  Msc  |  LL  |   10.00... |

| 1  |      2      |     4     |  CSS  |  VV  |   10.30... |
| 0  |      2      |     4     |  CSS  |  NN  |   10.20... |
我意识到,创建_at和id的顺序是相同的。所以,我决定使用id desc,因为在created_at字符串中安排日期整数可能会有问题。这就是我所尝试的:

$comment = Comment::where('receiver_id', Auth::user()->id)
                  ->orderBy('id','desc')
                  ->groupBy('sender_id', 'title')
                  ->paginate(5);
dd($comment);
我想得到的结果是:

0=>注释{id=13,发送者id=5,title=Art,body=DD}最新创建时间

1=>注释{id=9,发送者_id=3,title=Msc,body=XX}

2=>注释{id=6,发送者\ id=2,title=Foo,body=UU}

3=>注释{id=4,发送者\ id=2,title=You,body=QQ}

4=>注释{id=1,发送者\ id=4,title=CSS,body=VV}

然而,这显示了如下情况:

0=>注释{id=10,发送者_id=5,标题=Art,正文=AA}

1=>注释{id=5,发送者_id=2,title=Foo,body=II}

2=>注释{id=3,发送者\ id=2,title=You,body=WW}

3=>注释{id=2,发送者_id=3,title=Msc,body=LL}

4=>注释{id=0,发送者_id=4,title=CSS,body=NN}

它给出了最新的评论,但得到了最早的评论

它完全跳过了User-3,并显示了User-2的2个主题

然后在这里显示User-3,在完成User2的2个主题之后,而不是在“Art”之后

当我在上述查询中删除->分页并尝试->toSql时,我收到:

"select * from `comments` where `receiver_id` = ? group by `title`, `sender_id` order by `id` desc"
我认为order by id desc零件是在错误的位置创建的,因此这可能会导致问题。但是,我不确定

另外,当我交换->orderBy和->groupBy的位置时,比如->groupBy,然后->orderBy,它返回完全相同的结果

最后,我尝试替换->orderBy'title',sender\u id',但结果还是一样


我做错了什么或错过了什么?提前感谢。

您的问题是关于mysql group by在order by之前执行的

解决方案应具有内部联接:

Comment::join(\DB::raw('(select max(id) as id from comments group by sender_id) t'),function($join){
                  $join->on('comments.id', '=', 't.id');
})->where('comments.receiver_id', Auth::user()->id)
  ->orderBy('id','desc')
  ->paginate(5);
与此类似:


当我尝试您的示例时,由于某种原因,我收到了未找到的列:“on子句”中的1054未知列“t”。未找到列:1054子句“SQL:选择计数*作为来自注释的聚合”中的未知列“t”`Internal join select maxid from comments group by sender\u id t on comments.id=t where comments.receiver\u id=Test`。我理解你的方法,但我就是不知道如何应用它,因为这是一种给予error@senty,已修复,小姐身份声明谢谢!这使我向前迈出了一大步。它成功地将用户组合在一起。但是,我想有一个条目,其中发送者id和主题都是相同的。所以,我想为ids6&5和3&4提供两个单独的元素,因为它们有不同的主题