如何检查SELECT EXISTS是否返回值?

时间:2010-12-19 20:38:57

标签: php sql

我正在尝试快速确定user_ID是否是“目标”的所有者。我相信我的SQL查询很好,但我正在尝试找一种检查结果的好方法!

在这种情况下,无论我为$ 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;
}

8 个答案:

答案 0 :(得分:42)

不要打扰EXISTS。内联存在将始终提供包含“true”或“false”的一行

您正在寻找“零行”或“至少一行”,因此请将查询更改为此类然后检查返回的行数

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

答案 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 :(得分: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;

答案 3 :(得分: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!
}

答案 4 :(得分:1)

SELECT EXISTS总是返回一行! 以下代码使用最快的MySql查询(根据此答案:https://stackoverflow.com/a/10688065/3710053)并在PHP中给出正确的结果:

$link = mysqli_connect($DB_SERV, $DB_USER, $DB_PASS, $DB_NAME);
$query = "SELECT EXISTS (SELECT * FROM goals 
                      WHERE goal_ID='$obj_id' 
                        AND user_ID='$user_id' 
                      LIMIT 1) 
      as `row_exists`";

if(mysqli_fetch_assoc(mysqli_query($link,$query))['row_exists'] ===0) {
   // Nothing found!
}

答案 5 :(得分:1)

真正适用于 MySQL 的配置:

$sql="SELECT EXISTS (Select * FROM $dbname.$dbrel WHERE Index_r=$idx AND ... LIMIT 
1)";    
$r1=mysqli_fetch_row(mysqli_query($conn, $sql));
if (current($r1) == 0) {when no recoeds} else {when exist records }

答案 6 :(得分:0)

怎么样:

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

return  mysql_query($query) ? false : true;

答案 7 :(得分:0)

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