2013-08-24 149 views
0

我在與下面的查詢問題:SQL數限制的結果

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,所以我檢查就像我總是這樣通過在SELECTcount(1) AS counter之後加上。但是,這會影響結果。

How it should be

How it is with the count.

我已經看到了,這可能是一個問題,因爲也有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)。

因此:如何檢查此問題,最好在單個查詢中進行檢查?

+1

我建議你解釋你正在做什麼。基於我能理解的是你想獲得結果集,但同時你需要一些方法來確定是否沒有行被返回。如果它返回一個集合,我會猜測你肯定可以詢問這個集合,但我不是一個PHP的人。我建議你重寫你的需求,這樣人們可以更好地理解。 –

+0

@RobertCo我編輯了我的答案來澄清我自己。 – jdepypere

回答

1

。我不親自熟悉MySQL的特性,能夠覆蓋這個我通常會讓它在你的問題中留言,但我沒有要求的代表呢。所以,我必須讓它成爲「答案」。

這聽起來像你想要的T-SQL的@@ ROWCOUNT的等價物。從我可以發現運作就講到這兒

Does Mysql have an equivalent to @@ROWCOUNT like in mssql?

這裏

obtain row count in mysql query itself

也許有些是對你有用的。

+0

您的第一個鏈接確實鏈接到正確的解決方案,在新查詢中使用'SELECT ROW_COUNT();'比整個查詢更高效計算結果。 – jdepypere

1

count(*) as count加上count count of rows。

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 
+0

這似乎[也返回一個結果](http://sqlfiddle.com/#!2/7ae77/16),同時有[預期的兩個](http://sqlfiddle.com/#!2/7ae77/5 ) – jdepypere

+0

@arbitter你想通過查詢知道你有多少條記錄在表上? – hallaji

+0

我只是想檢查是否有結果。在正常情況下,表格應該飽和,並且5條記錄應該是最小值。但萬一發生了什麼事情,它突然下降到0,我想說,沒有結果,而沒有任何結果。 – jdepypere