我在执行以下查询时遇到问题:
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)。
那么:我该如何检查这一点,最好是在单个查询中?
最佳答案
由于我个人并不熟悉涵盖此内容的 MySQL 功能,因此我通常会对您的问题发表评论,但我还没有所需的代表。所以,我必须把它作为一个“答案”。
听起来您想要相当于 T-SQL 的 @@ROWCOUNT。据我所知,这里讨论的是
Does Mysql have an equivalent to @@ROWCOUNT like in mssql?
这里
obtain row count in mysql query itself
也许其中一些对你有用。
关于mysql - SQL 计数限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420244/