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

时间:2018-02-24 00:54:11

标签: mysql go

我有用于分页的逻辑,它的工作原理非常好。这个问题是为了优化/改进我的工作方式。

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

我想避免运行两个查询,并尽可能将它们合并为一个查询。

例如,如果数据库中有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的聚合查询中,表达式#1   SELECT列表包含nonaggregated column' mytable.item.id&#39 ;;这是   与sql_mode = only_full_group_by

不兼容

0 个答案:

没有答案