【问题标题】:SQL count limiting resultsSQL 计数限制结果
【发布时间】:2013-08-24 15:38:26
【问题描述】:

我对以下查询有疑问:

SELECT 
   badge.name AS badge_name, badge.description, badge.type, badges.time, user.name AS user_name 
FROM 
   badges LEFT JOIN badge ON badges.badge_name = badge.name LEFT JOIN user ON user.id=badges.user_id 
WHERE 
   user.name IS NOT NULL 
ORDER BY badges.time DESC 
LIMIT 5

现在,我想检查结果的数量是否不为 0,所以我像往常一样检查,在 SELECT 之后添加:count(1) AS counter。但是,这会影响结果。

How it should be.

How it is with the count.

我发现这可能是一个问题,因为还有一个 LIMIT,但最有效的方法是什么?我只想检查是否返回任何结果,以显示没有结果的正确消息。我正在使用PDO,但由于它是SELECT,我无法使用->rowCount() 来检查返回的行数。

编辑:

我想确定是否有任何结果,是或否。我的正常方法是使用count(1) AS counter,并检查计数器的值如下:

while($row['counter'] = $STH->fetch()){
    if($row['counter'] == 0){
        // Error message
    }else{
        echo $row['badge_name'] . "etc...";
    }
}

然而,由于LIMIT,这似乎弄乱了结果(检查 SQLFiddles)。

那么:我怎样才能检查这个,最好是在一个查询中?

【问题讨论】:

  • 我建议您解释一下您要做什么。根据我的理解,您想要获取结果集,但同时您想要某种方式来确定是否没有返回任何行。如果它返回一个集合,我猜你当然可以询问计数,但我不是 PHP 人。我建议您重写您的需求,以便人们更好地理解。
  • @RobertCo 我已经编辑了我的答案以澄清自己。

标签: mysql sql pdo


【解决方案1】:

由于我个人不熟悉涵盖此内容的 MySQL 功能,因此我通常会在您的问题上发表评论,但我还没有所需的代表。所以,我必须让它成为一个“答案”。

听起来您想要相当于 T-SQL 的 @@ROWCOUNT。从我能找到的内容来看,这里谈到了

Does Mysql have an equivalent to @@ROWCOUNT like in mssql?

这里

obtain row count in mysql query itself

也许其中一些对你有用。

【讨论】:

  • 您的第一个链接确实链接到正确的解决方案,在新查询中使用SELECT ROW_COUNT(); 比执行整个查询并计算结果更有效。
【解决方案2】:

添加count(*) as count 以计算行数。

SELECT
   count(*) as `count`
FROM
   badges LEFT JOIN badge ON badges.badge_name = badge.name LEFT JOIN user ON user.id=badges.user_id
WHERE
   user.name IS NOT NULL

【讨论】:

  • 这似乎是also return one result,而有two expected
  • @arbitter 你想知道你在查询表上有多少条记录吗?
  • 我只是想看看有没有结果。在正常情况下,表应该是饱和的,并且至少应该有 5 条记录。但万一发生什么事,突然降到0,我想说没有结果,而不是一无所有。
  • 我更新了答案。如果存在,它将返回行数为count
  • 好吧,我又让自己有点不清楚了——我也想得到表格的结果,而不仅仅是计数。是否可以在单个查询中执行此操作?
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多