使用LIMIT关键字检索项目总数

时间:2018-05-21 05:19:57

标签: mysql mariadb

我要做的是返回我查询(和有限)的结果以及表格中的项目总数。这是我到目前为止所拥有的。

    SELECT id, name
    FROM ??
    WHERE
        user_id = ?
    LIMIT ? , ?;

    SELECT COUNT(*) as total
    FROM ??
    WHERE
        user_id = ?
    ;

这是两个SQL查询,我想知道如何将它组合成一个。我希望总数本身(如果可能的话),否则作为每行的附加列。或者也许我现在拥有的是最优化的解决方案。

3 个答案:

答案 0 :(得分:3)

好吧,你可以使用子查询在每行中包含计数:

SELECT
    id,
    name,
    (SELECT COUNT(*) FROM yourTable WHERE user_id = ?) total
FROM yourTable
WHERE
    user_id = ?;

但是,从分离的关注点来看,这可能不是最佳做法。相反,更典型的是我希望在这里看到两个单独的查询。

答案 1 :(得分:2)

使用CROSS JOIN

执行相同操作的另一种方法
SELECT 
        t1.id,
        t1.[name],
        t2.cnt 
FROM 
        yourtable t1

CROSS JOIN 
        (
            SELECT 
                    COUNT(1) AS cnt 
            FROM 
                    yourtable 
            WHERE 
                    [user_id] = ? 
        ) t2
WHERE 
        t1.[user_id] = ?
LIMIT 
        ?, ?

答案 2 :(得分:2)

SELECT SQL_CALC_FOUND_ROWS
    ...
    LIMIT ...

SELECT FOUND_ROWS();

Reference.

或者,我会投票给CROSS JOIN,而不是子查询。