2017-08-01 91 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