2012-01-29 34 views
9

Si su único objetivo es comprobar si existe una fila en php (verdadero o falso), ¿cuál es la mejor manera de hacerlo?Entonces, ¿cuál es la mejor manera de verificar si existe una fila? EXISTS, COUNT o num_rows?

Opción 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 

Opción 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 

Opción 3? opción

$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?

lo que sea.

preguntas secundarias

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

posible duplicado de [SQL conseguir la optimización del número de filas] (http://stackoverflow.com/questions/8852753/sql-getting-row-count-optimization) – mario

+0

@mario: Está relacionado pero no es lo mismo. Aquí se pregunta si count = 0 o> 0, no el recuento exacto. –

+1

@ypercube: los otros duplicados vinculados allí cubren eso. Y existen más en el tema COUNT vs EXISTS, http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – mario

Respuesta

5

opción 3 es la manera más rápida para comprobar si existe una fila si está utilizando 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 
1

El EXISTS es más rápido que SELECT COUNT(*) porque la subconsulta dejará de buscarse cuando encuentre una fila. No tendrá que encontrarlos a todos y contarlos. Se devolverá 0 o 1:

SELECT EXISTS 
     (SELECT * FROM ...) 
+0

Estoy en lo cierto al entender que todavía necesitaré usar 'mysql_result'? Y la misma pregunta aquí: cualquier ventaja al usar '' SELECT COUNT (*) ... '',' 'SELECT COUNT (1) ...'' o ''SELECT COUNT (id) ...''? – SuperSpy

+0

El enlace de Mario explica las diferencias. 'COUNT (*)' suele ser más rápido que 'COUNT (NotNullColumn)'. 'COUNT (NullableColumn)' produce el resultado de differnet. –

+0

regla general en cualquier rdbms es que EXISTS es la forma más rápida de hacerlo, no solo MySQL – Cruachan

3

Creo que la pregunta se refiere más el propio código, entonces el tiempo implicado, así que usar su consulta:

$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
.. .excerpt de PHP manual Valores devueltos

Para SELECT, SHOW, DESCRIBE, EXPLAIN y otras declaraciones que devuelven r esultset, mysql_query() devuelve un recurso en caso de éxito o FALSE en el error .

Para otro tipo de instrucciones SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() devuelve TRUE en caso de éxito o FALSE en caso de error.

Cuestiones relacionadas