我正在尝试快速确定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;
}
答案 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);