0

我对以下查询有疑问:

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。但是,这会影响结果。

应该如何

计数情况如何。

我已经看到这可能是一个问题,因为也有一个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),这似乎弄乱了结果。

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

4

2 回答 2

1

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

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

Mysql 是否与 mssql 中的 @@ROWCOUNT 等效?

和这里

在mysql查询本身中获取行数

也许其中一些对你有用。

于 2013-08-24T16:17:16.057 回答
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
于 2013-08-24T15:47:47.143 回答