Как проверить, возвращает ли SELECT EXISTS значение или нет?
Я пытаюсь быстро определить, является ли 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;
}
Ответы
Ответ 1
Не беспокойтесь о EXISTS. Внутри строки всегда указывается одна строка, содержащая "true" или "false".
Вы ищете либо "нулевые строки", либо "по крайней мере одну строку", поэтому измените запрос на что-то вроде этого, а затем проверьте, сколько строк возвращается
SELECT 1 FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id' LIMIT 1
Ответ 2
Мне нравится gbn ответить на лучшее, но я хотел бы указать, что это:
if (@mysql_num_rows(mysql_query($query))!=1) {
return false;
} else {
return true;
}
можно упростить до:
return @mysql_num_rows(mysql_query($query)) == 1;
Ответ 3
Подсчет количества строк, соответствующих критериям, должен быть проще:
$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;
Ответ 4
Этот путь, вероятно, быстрее.
$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!
}
Ответ 5
что об этом:
$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')";
return mysql_query($query) ? false : true;
Ответ 6
mysql_result(mysql_query("SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"),0);