Mysql SQL计数限制结果

Mysql SQL计数限制结果,mysql,sql,pdo,Mysql,Sql,Pdo,我对以下查询有疑问: 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

我对以下查询有疑问:

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,所以我像往常一样检查,在
选择
计数(1)作为计数器之后添加这个。但是,这会影响结果


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

编辑:

我想确定是否有任何结果,是或否。我通常的做法是使用
计数(1)作为计数器
,并按如下方式检查计数器的值:

while($row['counter'] = $STH->fetch()){
    if($row['counter'] == 0){
        // Error message
    }else{
        echo $row['badge_name'] . "etc...";
    }
}
但是,由于
限制,这似乎会弄乱结果(请检查SQLFiddles)

那么:我如何检查这一点,最好是在单个查询中?

添加
count(*)作为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

因为我个人不熟悉MySQL的功能,所以我通常会对你的问题发表评论,但我还没有必要的代表。所以,我必须做出一个“回答”

听起来您想要的是与T-SQL的@ROWCOUNT等效的。根据我所能找到的,这里讨论的

这里呢


也许其中一些对您有用。

这似乎是有@arbitter的,您想通过查询知道表中有多少条记录吗?我只想检查是否有结果。在正常情况下,表格应饱和,至少应记录5条。但是如果发生了什么事情,它突然降到0,我想说没有结果,而不是什么都没有。我更新了答案。它返回的行数为
count
(如果有的话)。好吧,我又弄不清楚了——我还想得到表的结果,而不仅仅是计数。有没有可能在一个单独的查询中做到这一点?我建议你解释一下你想做什么。根据我所能理解的,您希望获得resultset,但同时需要某种方法来确定是否没有返回任何行。如果它返回一个集合,我猜你肯定可以询问计数,但我不是PHP的人。我建议您重新编写您的需求,以便人们更好地理解。@RobertCo我编辑了我的答案以澄清我自己。您的第一个链接确实链接到了正确的解决方案,使用
SELECT ROW_COUNT()比执行整个查询并计算结果更有效。