2010-12-19 32 views
26

Estoy tratando de determinar rápidamente si un user_ID es el propietario de un 'objetivo'. Creo que mi consulta SQL es buena, ¡pero estoy tratando de encontrar una buena manera de verificar el resultado!¿Cómo comprobar si SELECT EXISTS devuelve un valor o no?

En este caso, no importa lo que puse para $ obj_id o $ user_id, mi función devuelve verdadero. Supongo que es porque mysql_num_rows está contando incluso un resultado falso como una fila? Entonces, ¿qué código PHP debería usar para verificar si el resultado existe o no?

¡Tenga en cuenta que quiero algo corto y elegante! Sé que podría hacerlo por mucho tiempo (verificar el recuento (*), devolver mysql_assoc y luego verificar el valor de conteo ...) pero eso es largo y feo.

¿Alguna idea? ¡Gracias!

$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

Uso de 'count (*)' debe ser preferida porque devuelve una sola fila en lugar de potencialmente millones. – Arjan

Respuesta

42

No moleste con EXISTS. El en línea existe siempre dará una fila que contiene "verdadero" o "falso".

Usted está buscando ya sea "cero filas" o "al menos una fila" para cambiar la consulta a algo como esto y luego comprobación de cómo se devuelven muchas filas

SELECT 1 FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id' LIMIT 1 
2

Contando el número de filas coincidir con los criterios debería ser más fácil:

$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; 
10

me gusta de GBN responder lo mejor, pero quería señalar que esto:

if (@mysql_num_rows(mysql_query($query))!=1) { 
    return false; 
} else { 
    return true; 
} 

se puede simplificar a:

return @mysql_num_rows(mysql_query($query)) == 1; 
+2

Tengo algunas otras cosas en mis secciones "if/else" en la página real, así que no puedo simplificar tanto, pero no me di cuenta de que podría simplemente agregar el '==' así. Gracias, eso es útil! – Symmitchry

0

qué pasa con esto:

$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"; 

return mysql_query($query) ? false : true; 
2

De esta manera es probablemente más rápido.

$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! 
} 
+0

Esto es de hecho, más rápido. http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – Edward

0
mysql_result(mysql_query("SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"),0); 
Cuestiones relacionadas