我有以下查詢。爲什麼會這樣呢?洋洋灑灑數()始終返回1
這裏是DB::getQueryLog()
原始查詢:
select
count(*) as aggregate
from
`items`
left join
`inventory` ON `items`.`id` = `inventory`.`item_id`
group by `items`.`id`
我有以下查詢。爲什麼會這樣呢?洋洋灑灑數()始終返回1
這裏是DB::getQueryLog()
原始查詢:
select
count(*) as aggregate
from
`items`
left join
`inventory` ON `items`.`id` = `inventory`.`item_id`
group by `items`.`id`
是,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
。
我實際上需要將返回用於分頁的行數。我習慣於'count'只返回一行,查詢返回的行數有多少。例如,在這種情況下,我希望單行使用#20的單列。然而,在這種情況下,'count'返回一個行列表,每行只有#'1'。這不僅弄亂了我對這個查詢的結果,而且還搞亂了Bllim Datatables中的結果,這樣當Datatables自動獲取它時,分頁不起作用。 – eComEvo 2014-10-11 15:49:59
你知道聚合如何與group by子句一起工作嗎? – 2014-10-11 16:43:53
看起來,這將對組中的每條記錄進行計數,而不是對結果集中的所有記錄進行計數。看起來我需要刪除'groupBy'子句並修改'select'來代替'DISTINCT items.id'? – eComEvo 2014-10-11 18:04:19
Count獲取查詢返回的行數。如果您只有一個項目和多個庫存條目,則它將始終返回1,因爲您正在按items.id進行分組。你有沒有嘗試過使用SUM()? – 2014-10-11 14:50:24
我需要知道物品的行數,而不是行的庫存(這是可選的)。庫存表目前爲空。只是爲了看看這個連接是否搞亂了這個,我把它和'inventory.quantity'列刪除了。如果我只是將其更改爲'get()',則在返回結果中有20個項目時,仍然向我顯示'count()= 1'。 – eComEvo 2014-10-11 14:52:48
@VladCazacu我剛剛發現,如果我從查詢中刪除'groupBy('items.id')',我會得到一個準確的計數。事實上,我注意到,如果我在任何表上的任何查詢上使用'groupBy',那麼在count上只會得到1。 – eComEvo 2014-10-11 15:09:57