SQL计数限制结果

时间:2013-08-24 15:38:26

标签: 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 NULL 
ORDER BY badges.time DESC 
LIMIT 5

现在,我想检查结果的数量是不是0,所以我在SELECTcount(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),这似乎搞乱了结果。

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

2 个答案:

答案 0 :(得分:1)

添加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

答案 1 :(得分:1)

由于我并不熟悉MySQL功能,我通常会对你的问题发表评论,但我还没有所需的代表。所以,我必须把它作为一个“答案”。

听起来你想要相当于T-SQL的@@ ROWCOUNT。从我能找到的内容中可以看到

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

在这里

obtain row count in mysql query itself

也许其中一些对您有用。