web-dev-qa-db-fra.com

Comment vérifier si SELECT EXISTS renvoie une valeur ou non?

J'essaie de déterminer rapidement si un ID utilisateur est le propriétaire d'un "objectif". Je crois que ma requête SQL est bonne, mais j'essaie de trouver un moyen agréable de vérifier le résultat!

Dans ce cas, peu importe ce que je mets pour $ obj_id ou $ user_id, ma fonction renvoie true. Je suppose que c'est parce que mysql_num_rows compte même un résultat faux comme une ligne? Alors, quel code PHP dois-je utiliser pour vérifier si le résultat existe ou non?

Notez que je veux quelque chose de court et élégant! Je sais que je pourrais faire le long chemin (check count (*), retourner mysql_assoc puis vérifier la valeur count ...) mais c'est long et moche.

Des idées? Merci!

$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;
}
26
Supermitch

Ne vous embêtez pas avec EXISTS. La ligne existante existe toujours avec la ligne one contenant "true" ou "false".

Vous recherchez "zéro ligne" ou "au moins une ligne", changez la requête en quelque chose comme ceci et then vérifiez le nombre de lignes renvoyées.

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

J'aime bien la réponse de gbn, mais je tenais à préciser que:

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

peut être simplifié à:

return @mysql_num_rows(mysql_query($query)) == 1;
10
Brad Mace

Compter le nombre de lignes correspondant aux critères devrait être plus facile:

$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;
2
Esteban

Cette voie est probablement plus rapide.

$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!
}
2
Bas

et ça: 

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

return  mysql_query($query) ? false : true;
0
tareco
mysql_result(mysql_query("SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')"),0);
0
levent