2014-10-11 70 views
2

我有以下查詢。爲什麼會這樣呢?洋洋灑灑數()始終返回1

這裏是DB::getQueryLog()原始查詢:

select 
    count(*) as aggregate 
from 
    `items` 
     left join 
    `inventory` ON `items`.`id` = `inventory`.`item_id` 
group by `items`.`id` 
+1

Count獲取查詢返回的行數。如果您只有一個項目和多個庫存條目,則它將始終返回1,因爲您正在按items.id進行分組。你有沒有嘗試過使用SUM()? – 2014-10-11 14:50:24

+0

我需要知道物品的行數,而不是行的庫存(這是可選的)。庫存表目前爲空。只是爲了看看這個連接是否搞亂了這個,我把它和'inventory.quantity'列刪除了。如果我只是將其更改爲'get()',則在返回結果中有20個項目時,仍然向我顯示'count()= 1'。 – eComEvo 2014-10-11 14:52:48

+0

@VladCazacu我剛剛發現,如果我從查詢中刪除'groupBy('items.id')',我會得到一個準確的計數。事實上,我注意到,如果我在任何表上的任何查詢上使用'groupBy',那麼在count上只會得到1。 – eComEvo 2014-10-11 15:09:57

回答

0

是,count只返回1行,一如既往。

你可能會想:

Item::select(['items.id as id', 'inventory.quantity as quantity']) 
->leftJoin('inventory', 'items.id', '=', 'inventory.item_id') 
->groupBy('items.id') 
->lists('quantity', 'id'); 

這將返回一個陣列id鑰匙,和quantity作爲值。否則使用get,但如果要分組結果,則不使用count

+0

我實際上需要將返回用於分頁的行數。我習慣於'count'只返回一行,查詢返回的行數有多少。例如,在這種情況下,我希望單行使用#20的單列。然而,在這種情況下,'count'返回一個行列表,每行只有#'1'。這不僅弄亂了我對這個查詢的結果,而且還搞亂了Bllim Datatables中的結果,這樣當Datatables自動獲取它時,分頁不起作用。 – eComEvo 2014-10-11 15:49:59

+0

你知道聚合如何與group by子句一起工作嗎? – 2014-10-11 16:43:53

+0

看起來,這將對組中的每條記錄進行計數,而不是對結果集中的所有記錄進行計數。看起來我需要刪除'groupBy'子句並修改'select'來代替'DISTINCT items.id'? – eComEvo 2014-10-11 18:04:19