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

agxfikkp  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(310)

我要做的是返回查询的(和有限的)结果以及表中的项目总数。这是我目前掌握的情况。

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

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

这是两个sql查询,我想知道如何或者是否有可能将其组合成一个。我希望总数是自己的(如果可能的话),否则作为一个附加列到每一行。或者也许我现在得到的是最理想的解决方案。

1l5u6lss

1l5u6lss1#

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

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

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

thigvfpy

thigvfpy2#

SELECT SQL_CALC_FOUND_ROWS
    ...
    LIMIT ...

SELECT FOUND_ROWS();

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

wvyml7n5

wvyml7n53#

另一种方法是使用 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
?, ?

相关问题