2015-08-14 112 views
1

我有一個Web應用程序,它目前使用PHP對存儲在MySQL數據庫中的一些數據進行排序。我目前通過使用Laravel框架來增強應用程序,但是在將Laravel中的所有各種MySQL命令與DB使用的命令等同起來時遇到困難。將MySQL查詢翻譯成Laravel

我有一個表有一些重複的author名稱,並且想要爲這些重複項求和citations列值。舉例來說,我可能在表格中有兩位作者,分別是John Doe,一位是30引用,另一位是20。在運行當前查詢後,我將有兩行John Doe,兩個都與50引用。然後,我使用GROUP BY僅獲取作者的一個實例。下面是從我的PHP代碼當前查詢:

// sum citations for duplicate authors 
mysqli_query($connect, "UPDATE searchresponse AS r JOIN(SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author) AS grp ON grp.author = r.author SET r.citations = grp.citations"); 

現在,我一直在試圖沿着以下線的東西,但我不知道如何複製像Laravel ASSET命令:

// select relevant data 
$sumData = DB::table('searchresponse') 
    -> (something); 
// insert selected data into table 
foreach ($sumData as $value) { 
    DB::table('searchresponse')->insert(
     [ 
      'author' => $value->author, 
      'citations => $value->citations 
     ] 
    ); 
} 

基本上我需要知道如何在Laravel中引用表格AS,所以我可以將它與自身進行比較,就像我在原始方法中引用searchresponse AS r一樣。或者,實際上,只是如何在Laravel中複製我的原始PHP MySQL查詢。

編輯

它的工作,這似乎更喜歡那種事情,我需要做的:

// sum citations for duplicate authors 
function sumCites($data) { 
    $sumAll = DB::table('searchresponse') 
     ->join('searchresponse', 'searchresponse.citations', '=', 'searchresponse.citations') 
     ->where('searchresponse.author', '=', 'searchresponse.author') 
     ->get(); 
} 

但我仍然得到一個錯誤

回答

1

請嘗試以下方式獲得數據:

function sumCites($data){ 
    // Update first 
    \DB::update('UPDATE searchresponse AS r 
    JOIN(
     SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author 
     ) grp 
     ON grp.author = r.author 
     SET r.citations = grp.citations'); 

    //Now fetch all data from that table 
    $sumAll = \DB::table('searchresponse')->get(); 
    return $sumAll; 
} 

如果你想更新表,你可以使用你的SQL一樣,直接

+0

謝謝,但這不起作用。運行該功能後,表中的數據保持不變。 – jayrdi

+0

我是否需要在那裏更新'update'來更新表中的數據,或者'join'是否需要處理? – jayrdi

+1

請再試一次。我更新了功能。如果你有任何錯誤,請告訴我。 – Janaki

1

要加入到因此您需要使用表別名進行連接,請嘗試如下所示:

// sum citations for duplicate authors 
function sumCites($data) { 
    $sumAll = DB::update('searchresponse') 
     ->join('searchresponse as b', 'searchresponse.citations', '=', 'b.citations') 
     ->where('searchresponse.author', '=', 'b.author') 
     ->get(); 
} 
+0

謝謝,但這並沒有出於某種原因。表中的數據不會改變... – jayrdi

+0

我不需要在那裏更新'update'來更新表中的數據嗎? – jayrdi

+0

原始查詢似乎選擇了數據,如果您更新,您必須更新某些列。讓我知道你想做什麼,我會更新查詢。 – yangqi