当前位置: 首页 > 知识库问答 >
问题:

获取结果列表,并在一个查询中获取总数

长孙章横
2023-03-14

我有用于分页的逻辑,它工作得非常好。这个问题是为了优化/改进我是如何做某事的。

我正在运行两个查询以获得结果集。第一个查询按限制和偏移量获取所有项,第二个查询获取总计数。我需要这个总数来计算表示层中的分页链接。

我想避免运行两个查询,如果可能的话,将它们合并成一个。

例如,如果数据库中有100项,并且我运行下面的查询时LimitStartIndex为1,LimitStopIndex为20,那么查询应该返回20个结果和100个计数。我目前在两个单独的查询中实现了这一点,但我又想在一个查询中完成。

以下是我当前的设置(使用Golang):

var items []*Item
err := r.db.Select(&items, `
    SELECT item.*
    FROM item
    JOIN user
        ON user.username = ?
    JOIN user_item
        ON user_item.item_id = item.id
        AND user_item.user_id = user.id
    ORDER BY item.id DESC
    LIMIT ?,?
`, username, pagination.LimitStartIndex, pagination.LimitStopIndex)
if err != nil {
    // ...
}

var total int
err = r.db.Get(&total, `
    SELECT COUNT(*)
    FROM item
    JOIN user
        ON user.username = ?
    JOIN user_item
        ON user_item.item_id = item.id
        AND user_item.user_id = user.id
`, username)
if err != nil {
    // ...
}

result := &domain.PaginationResult{
    Items: items,
    Total: total,
}

我试过这样的方法:

SELECT item.*, COUNT(DISTINCT item.id) AS _count
FROM item
JOIN user
    ON user.username = ?
JOIN user_item
    ON user_item.item_id = item.id
    AND user_item.user_id = user.id
ORDER BY item.id DESC
LIMIT ?,?

但是,我收到此错误:

错误1140:在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列mytable.item.id;这与sql_mode=only_full_group_by

共有1个答案

杜河
2023-03-14

确保在查询中添加'group by'。希望这能有所帮助。谢谢。

SELECT item.*, COUNT(*) AS _count
FROM item
JOIN user
    ON user.username = ?
JOIN user_item
    ON user_item.item_id = item.id
    AND user_item.user_id = user.id
GROUP BY item.id        
ORDER BY item.id DESC
LIMIT ?, ?
 类似资料:
  • 我正在使用散列键查询DynamoDB表。表中的每个记录都由散列键和范围键唯一标识 当结果集大于1MB时,如何检索其余的。我找不到任何方法来获取文档中提到的。

  • 问题内容: 我有这样的查询: 上述查询^中的结果数为10行。现在,我想知道如何在此查询中获取总结果数: 如何计算此^中所有结果的数量 (与无关)? 其实我想要这个数字: 现在,我想知道如何在没有其他查询的情况下获得总结果数。 问题答案: 添加一列,例如: 如 @Tim Biegeleisen所述 : 关键字在所有其他内容之后应用,因此仍然返回正确的答案。

  • 本文向大家介绍Python获取SQLite查询结果表列名的方法,包括了Python获取SQLite查询结果表列名的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python获取SQLite查询结果表列名的方法。分享给大家供大家参考,具体如下: 获得查询结果表的列名: 获得所有列名: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Py

  • 问题内容: 我正在尝试一次从三个表中检索数据。这些表如下所示: 类别 讯息 评论 我想要得到的是1条消息(因为我有一个基于id的子句),3个类别(因为有3个类别链接到消息)和2条注释(因为有2条注释链接到消息)。 我正在尝试使用以下查询来检索数据: 但是,当运行此查询时,我得到6个结果: 在我预期结果如下的地方: 只有三行,我应该能够获取所有需要的数据。这有可能吗?我做错了吗?? 问题答案: 如评

  • 我正在使用hibernate 4和Spring 3。 我有5个表,每个表映射一个实体类。现在,如果我必须从1个表中选择列,我将执行以下操作: 此结果中的此值将为EmployeeEntity类型。 或者我也可以使用标准。 现在我的要求是我必须从所有5个表中得到结果。每个表中有1-2列。 早些时候,它是一个1表,所以我得到了一个实体,现在我得到了5个表的结果,所以如何在实体中映射它。 List res

  • 我有以下查询来获得15秒的间隔。然而,即使结果没有值,我也想显示“0”值。 以下是问题; 结果是; 我想要的是这个; 我应该从上面的问题中改变什么?