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