【问题标题】:Get the total count of rows and rows limited by number with same query获取具有相同查询的行数和受数量限制的行数
【发布时间】:2013-02-17 16:20:25
【问题描述】:

假设在表 A 中有很多行,列值为 a,b,c,d。

其中,我想要 10 行,列值为“c”,同时还计算列值为“c”的总行数。

我试过了:

select count(*),* from A where column like 'c'; (without limit)

select count(*),* from A where column like 'c' limit 10;

这甚至可能吗?还是我必须触发两个查询。

【问题讨论】:

  • 您可以使用union,但为什么不简单地运行两个查询。
  • 触发 2 个查询会比一个查询更好吗???
  • 取决于您的应用程序。两个查询可能会引发竞争条件风险(如果两者之间发生一些变化,两个结果可能会不同)。但是在您的问题中,我看不到同时获得 10 个 c 行(没有其他约束或排序)以及总数的兴趣。
  • 收到的信息将作为ajax结果传递,然后显示图像。如果有 80 张或更多图片,则需要花费大量时间,因此我尝试仅选择性地加载前 10 张,然后再加载其他图片。

标签: mysql select count


【解决方案1】:
SELECT n.*, AA.cnt 
FROM nei_product_background_category c
    INNER JOIN nei_backgrounds n ON n.background_id = c.background_id
    INNER JOIN ( 
        SELECT cc.product_id, COUNT(*) AS cnt 
        FROM nei_product_background_category cc
                    INNER JOIN nei_backgrounds nn ON nn.background_id = cc.background_id
        GROUP BY cc.product_id
    ) AA ON c.product_id = AA.product_id
WHERE
    c.product_id = 578
LIMIT 10

【讨论】:

  • 给我一个错误。 “错误 1064 (42000):您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 'SELECT nei_backgrounds.*, AA.cnt INNER JOIN (SELECT background_id, COUNT( *) AS ' 在第 1 行"
  • 你介意在您的问题中发布完整的查询吗?
  • SELECT nei_backgrounds.*, AA.cnt FROM nei_backgrounds INNER JOIN (SELECT background_id, COUNT(*) AS cnt FROM nei_backgrounds WHERE background_id in (select background_id from nei_product_background_category where product_id = 578) GROUP BY background_id ) AA ON nei_backgrounds.column = AA.column WHERE nei_backgrounds.column (从 nei_product_background_category 中选择 background_id where product_id = 578) LIMIT 10
  • 在结果 cnt = 1 时我得到 10 个结果。有些不正确
  • 如果您愿意,我很乐意为您提供更多帮助
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 2021-10-27
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多