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 に答える