【发布时间】:2013-08-24 15:38:26
【问题描述】:
我对以下查询有疑问:
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)。
那么:我怎样才能检查这个,最好是在一个查询中?
【问题讨论】:
-
我建议您解释一下您要做什么。根据我的理解,您想要获取结果集,但同时您想要某种方式来确定是否没有返回任何行。如果它返回一个集合,我猜你当然可以询问计数,但我不是 PHP 人。我建议您重写您的需求,以便人们更好地理解。
-
@RobertCo 我已经编辑了我的答案以澄清自己。