2013-08-23 58 views
0

我使用的Laravel 4 php框架,我需要使用流利的查詢生成器來獲取一些統計類型的數據。 我有一個數據庫表像follwingLaravel 4流利的計數

id: int 
group_id: int 
sent_at: datetime 
message_id: int 

我需要一個流暢的查詢,將得到具有相同的消息ID的所有行數的結構,我想也有伯爵所舉辦GROUP_ID。

例如,我有一個消息ID爲1,消息ID爲1的每行都有一個組ID,它們可以相同也可以不相同。我需要知道表中給出的消息ID的組ID,以及每個組ID的總數。

我希望這是有道理的。

謝謝你的幫助。

回答

2

這是Laravel 4版本:

$message_id = 1; 

// You can change "amount" to anything that best suits you 
// The `orderBy` line is not necessary, but I'm assuming you will may need it. 
$groups = DB::table('YOUR_TABLE_NAME') 
    ->select(array('group_id', DB::raw('COUNT(*) `amount`'))) 
    ->where('message_id', '=', $message_id) 
    ->groupBy('group_id') 
    ->orderBy('amount', 'DESC') 
    ->get(); 

foreach ($groups as $g) { 
    echo "$g->group_id has $g->amount messages with id $message_id"; 
} 
+0

計數後的「金額」是多少?也是我認爲我看到了一個語法錯誤,在select子句中沒有足夠的圓括號 –

+0

您對語法錯誤是正確的。我修復了它。 'amount'告訴SQL命名列「amount」,然後轉換爲循環中的$ g-> amount。你可以任何你想要的名字。 – vFragosop

-2

嘗試該查詢得到GROUP_ID的計數每個MESSAGE_ID:

SELECT message_id, count(group_id) FROM table GROUP BY message_id 

爲了得到它對於給定的MESSAGE_ID只使用 「WHERE」:

SELECT message_id, count(group_id) FROM table WHERE message_id = XX GROUP BY message_id 

要獲得所有GROUP_ID給定MESSAGE_ID,只是使用這樣的簡單查詢:

SELECT group_id FROM table WHERE message_id = XX 

如果這不是你想要的,le牛逼我知道 - 我們將在正確的:)工作

EDIT(當然變「表」到你的表名):流利的版本爲例來獲取MESSAGE_ID = 1 GROUP_ID的計數:

$query = DB::table('table') 
->select(array('message_id', DB::raw('COUNT(group_id) as group_count'))) 
->where('message_id', '=', 1) 
->group_by('message_id') 
->get(); 
+0

OP要求一口流利的查詢,而不是原始的SQL。 – ciruvan

+0

真的,這裏流水號版本的group_id給定message_id: '$ query = DB :: table('table') - > select(array('message_id',DB :: raw('COUNT(group_id)as (''message_id','=',1) - > group_by('message_id') - > get();' –

+0

@MichałPrajsnar,你能重寫你的答案是否更客觀。也許你可以在原始SQL之前顯示流暢的查詢,或者如果不相關,就簡單地刪除SQL查詢。如果你改進了,我會提高你的答案。 –