我遇到以下问题的问题:
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),这似乎搞乱了结果。
那么:我怎样才能检查这个,最好是在一个查询中?
答案 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
也许其中一些对您有用。