洋洋洒洒数()始终返回1
我有以下查询。为什么会这样呢?洋洋洒洒数()始终返回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