2017-08-01 89 views
0

这是我桌子里的价值。如何获取phpmyadmin数据库(laravel)中的最新数据记录?

id branch_id name qty  datetime 
    --- --------- ---- ---- ----------- 
    1 1   a  5  2017-07-28 12:26:01 
    2 2   b  3  2017-07-28 12:26:02 
    3 3   c  4  2017-07-28 12:26:03 
    4 1   a  2  2017-07-29 12:26:04 
    5 2   b  2  2017-07-29 12:26:05 
    6 3   c  2  2017-07-29 12:26:06 

我希望它显示为

id branch_id name qty  datetime 
    --- --------- ---- ---- ----------- 
    4 1   a  2  2017-07-29 12:26:04 

我想获得该项目的最新日期时间时登录用户branch_id是1,因此只显示branch_id 1.

的细节

我试过下面显示的代码,但它返回的是旧记录,而不是最新的记录。

 DB::table('A') 
     ->leftJoin('B', 'A.id', '=', 'B.id') 
     ->where('A.id', Auth::user()->id) 
     ->groupby('name') 
     ->order_by('B.datetime', 'desc') 
     ->get(); 

我可以知道有什么问题吗? http://sqlfiddle.com/#!9/71f834/5

+0

你为什么离开加入在B表? –

+0

要从表B – Crazy

+0

得到一些细节,它是'groupBy和orderBy',然后使用' - > get()' –

回答

0

设置一个别名表,然后使用所需的别名的排序依据

DB::table('firsttable as A') 
    ->leftJoin('secondtable as B', 'A.id', '=', 'B.id') 
    ->where('A.id', Auth::user()->id) 
    ->orderBy('B.datetime', 'desc') 
    ->groupBy('name')->get(); 
+0

我做到了,结果是一样的。 – Crazy

+0

尝试在groupBy之前使用orderBy。 – laktherock

+0

问题stlll相同。 – Crazy

0

试试这一个。这看起来很奇怪,因为我们在一个表中使用了JOIN,但它起作用。

$query = DB::select(' 
    SELECT n1.* 
    FROM mytable n1 
      LEFT JOIN mytable n2 
       ON (n1.branch_id = n2.branch_id AND n1.id < n2.id) 
    WHERE n2.id IS NULL; 
'); 
+0

对不起,我可以知道我应该把这个放在哪里? – Crazy

+0

@引导,我再次深入审查你的示例代码,我想知道你是否真的想获得最新的数据。首先,你想用'qty'的'5','4','3'获取数据,但是在数据库中你不是最新的插入。其次,删除'join'和'where condition',你根据你的预期输出不需要它。 –

+0

我更新了我的示例表,我对我确切需要的内容犯了一些错误。 – Crazy

0

我认为这会你:

DB::table('A') 
     ->leftJoin('B', 'A.name', '=', 'B.name') 
     ->where('A.id', '>',B.id) 
     ->order_by('B.datetime', 'desc') 
     ->get(); 

原始查询Demo

我只是删除了论坛,并使用.name列到leftjoin

+0

是否以相同的方式来做到这一点,如果提到多个表? – Crazy

+0

@指导:没有得到重点,你的问题属于单表查询。你能否用新的问题展示你的多表查询? –

+0

branch_id是用于连接另一个表的FK。 – Crazy