Итак, какой лучший способ проверить, существует ли строка? EXISTS, COUNT или num_rows?

Если ваша единственная цель – проверить, существует ли строка в php (true или false) , каков наилучший способ сделать это?

Опция 1?

$result = mysql_query("SELECT * FROM users WHERE id = '1'"); $num_rows = mysql_num_rows($result); if ($num_rows == 1) // one user, like it should be. else // do something else 

Вариант 2?

 $query = mysql_query("select count(1) from users where id = 1") if (mysql_result($query, 0) == 1) // one user, like it should be. else // do something else 

Вариант 3?

 $query = mysql_query("something like SELECT EXISTS( SELECT */1/COUNT(*)/etc. ...)") if (mysql_result($query, 0) == 1) // one user, like it should be. else // do something else 

Beter вариант 4?

вы называете это.

подвопросы

  • COUNT(*), COUNT(1) or COUNT(id) ?

Вариант 3 – это самый быстрый способ проверить, существует ли строка, если вы используете MySQL:

 $query = mysql_query("SELECT EXISTS(SELECT 1 FROM users WHERE id = 1)") if (mysql_result($query, 0) == 1) // one user, like it should be. else // do something else 

Я думаю, что вопрос относится скорее к самому коду, а затем к времени, поэтому, используя его запрос:

 $result = mysql_query("SELECT * FROM users WHERE id = '1'"); //if result not returned(false) from Mysql return False Else True //This is just example and you can do anything you need in side the if() if(!$result) { //or return some error or redirect to another piece of code return FALSE; } else { //or do some other php/mysql magic //if there is a result you have the row to work with of needed return TRUE; } 

mysql_query
… выдержка из руководства PHP Возвращаемые значения

Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс с успехом или FALSE при ошибке.

Для других типов операторов SQL INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE при успешном завершении или FALSE при ошибке.

EXISTS быстрее, чем SELECT COUNT(*) потому что подзапрос прекратит поиск, когда найдет одну строку. Ему не нужно будет находить их всех и считать их. Он вернет либо 0, либо 1:

 SELECT EXISTS ( SELECT * FROM ... )