2010-12-19 59 views
26

我試圖快速確定user_ID是否是「目標」的所有者。我相信我的SQL查詢很好,但我試圖找到一個檢查結果的好方法!如何檢查SELECT EXISTS是否返回值?

在這種情況下,無論我爲$ obj_id或$ user_id放置什麼,我的函數都會返回true。我認爲這是因爲mysql_num_rows甚至將一個錯誤的結果作爲一個行計數?那麼,我應該用什麼PHP代碼來檢查結果是否存在?

請注意,我想短暫而優雅的東西!我知道我可以做很長的路(檢查計數(*),返回mysql_assoc然後檢查計數值...),但這是很長的囉嗦和醜陋。

任何想法?謝謝!

$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"; 
if (@mysql_num_rows(mysql_query($query))!=1) { 
    return false; 
} else { 
    return true; 
} 
+0

使用'COUNT(*)'應該是首選,因爲它僅返回一行,而不是潛在的數以百萬計。 – Arjan 2013-10-09 15:55:52

回答

42

不要打擾EXISTS。在線存在將總是給一個包含「真」或「假」的行。

你要找的不是「零排」或「至少一個排」所以查詢更改爲這樣的事情而然後檢查多行如何返回

SELECT 1 FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id' LIMIT 1 
2

計數多少行符合條件應該更容易:

$sql = SELECT COUNT(*) FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id' 
$query = mysql_query($sql); 
$result = mysql_fetch_row($query); 

return $result[0] >= 1; 
10

我喜歡GBN的回答是最好的,但我想指出的是這樣的:

if (@mysql_num_rows(mysql_query($query))!=1) { 
    return false; 
} else { 
    return true; 
} 

可以簡化爲:

return @mysql_num_rows(mysql_query($query)) == 1; 
+2

我在真實頁面的「if/else」部分中有一些其他的東西,所以我不能簡化那麼多,但我沒有意識到你可以添加像這樣的'=='。謝謝,這很有用! – Symmitchry 2010-12-19 20:59:22

0

你看這個:

$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"; 

return mysql_query($query) ? false : true; 
2

這種方式是可能更快。

$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"; 

if(mysql_num_rows(mysqli_query($query)) < 1) { 
    // Nothing found! 
} 
+0

這的確更快。 http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – Edward 2016-12-05 18:43:13

0
mysql_result(mysql_query("SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"),0); 
相關問題