25 Stimmen

Wie kann man prüfen, ob SELECT EXISTS einen Wert zurückgibt oder nicht?

Ich versuche, schnell festzustellen, ob eine user_ID der Eigentümer eines "goal" ist. Ich glaube, meine SQL-Abfrage ist gut, aber ich versuche, eine gute Möglichkeit zu finden, das Ergebnis zu überprüfen!

In diesem Fall gibt meine Funktion unabhängig davon, was ich für $obj_id oder $user_id eingebe, true zurück. Ich nehme an, das liegt daran, dass mysql_num_rows auch ein falsches Ergebnis als Zeile zählt? Welchen PHP-Code sollte ich also verwenden, um zu prüfen, ob das Ergebnis existiert oder nicht?

Beachten Sie, dass ich etwas Kurzes und Elegantes möchte! Ich weiß, ich könnte es auf die lange Art und Weise tun (check count(*), return mysql_assoc dann überprüfen Sie den Wert count...), aber das ist langwierig und hässlich.

Irgendwelche Ideen? Danke!

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

43voto

gbn Punkte 407102

Kümmern Sie sich nicht um EXISTS. Das in-line exist gibt immer eine Zeile, die "wahr" oder "falsch" enthält.

Sie suchen entweder nach "null Zeilen" oder "mindestens einer Zeile", also ändern Sie die Abfrage in etwas wie dieses und dann prüfen, wie viele Zeilen zurückgegeben werden

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

10voto

Brad Mace Punkte 26337

Mir gefällt die Antwort von gbn am besten, aber ich wollte darauf hinweisen, dass dies:

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

kann vereinfacht werden zu:

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

2voto

Esteban Punkte 874

Es sollte einfacher sein, zu zählen, wie viele Zeilen den Kriterien entsprechen:

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

2voto

Bas Punkte 25

Dieser Weg ist wahrscheinlich schneller.

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

1voto

Siebe Jongebloed Punkte 2606

SELECT EXISTS gibt immer eine Zeile zurück! Der folgende Code verwendet die schnellste MySql-Abfrage (nach dieser Antwort: https://stackoverflow.com/a/10688065/3710053 ) und liefert in PHP das richtige Ergebnis:

$link = mysqli_connect($DB_SERV, $DB_USER, $DB_PASS, $DB_NAME);
$query = "SELECT EXISTS (SELECT * FROM goals 
                      WHERE goal_ID='$obj_id' 
                        AND user_ID='$user_id' 
                      LIMIT 1) 
      as `row_exists`";

if(mysqli_fetch_assoc(mysqli_query($link,$query))['row_exists'] ===0) {
   // Nothing found!
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X