Mehrere Werte in einer Where Abfrage
P.K.
- php
Un zwar habe ich folgenden Code
$mycha = mysql_connect('ip', 'user', 'pass');
$dbcha = mysql_select_db('datenbank', $mycha);
$allis="SELECT online FROM characters WHERE online='1' AND race='1' AND race='3' AND race='4' AND race='7' AND race='11'";
$allia=mysql_query($allia, $mycha);
$allianz=mysql_num_rows($allia);
Er zeigt mir den Fehler an mysql_num_rows(): supplied argument is not a valid MySQ woraus ich schließe das er die SELECT Informationen nicht verarbeiten kann. Nun die Frage, er soll bei der zweiten Where Abfrage nur den Online spalte selektieren die bei race die folgenden Zahlen enthält: 1,3,4,7,11
Die Zugangsdaten sind außerdem richtig da ich noch eine solche Abfrage habe die im Gegenteil zu dieser Funktioniert.
Für mich ist das bisher ein wenig zu hoch. Ich hoffe mir kann hier jemand helfen.
Mit Freundlichen Grüßen
P.K.
Hallo,
Un zwar habe ich folgenden Code
der vorhergehende Satz ist wohl verlorengegangen?
$allis="SELECT online FROM characters WHERE online='1' AND race='1' AND race='3' AND race='4' AND race='7' AND race='11'";
Ich bin nicht der Experte für Datenbanken - aber schon die reine Programmierer-Logik sagt einem doch, dass derselbe Wert niemals gleichzeitig '1' UND '3' UND ... sein kann. Du meintest wahrscheinlich ein OR.
Er zeigt mir den Fehler an mysql_num_rows(): supplied argument is not a valid MySQ ...
... L resource?
Du solltest den Rückgabewert von mysql_query() auch auf Gültigkeit prüfen, anstatt ihn gutgläubig zu verwenden. Im Fehlerfall, oder wenn keine Datensätze auf die Anfrage passen, ist er nämlich ein boolsches false (ich finde es nicht gut, wenn eine Funktion Ergebnisse unterschiedlichen Typs zurückgibt, aber so isses nun mal).
So long,
Martin
Hi!
Du meintest wahrscheinlich ein OR.
oder ein:
WHERE online = '1' AND race IN('1', '3', '23')
~~~?
off:PP
--
"You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
WHERE online='1' AND race IN('1', '3', '4', '7', '11')";
Sorry wegen Doppelpost bin neu hier, allerdings funktioniert das auch nicht
Das mit dem Or war mir schon teilwesie klar aber wie soll ich das machen?
Etwa:
"SELECT online FROM characters WHERE online='1' AND race='1' OR race='3' OR race='4' OR race='7' OR race='11'";
Aber dies geht auch nicht.
Hello,
"SELECT online FROM characters WHERE online='1' AND race='1' OR race='3' OR race='4' OR race='7' OR race='11'";
Nein, das ist leider nicht die adäquate Umsetzung. Operatoren haben eine Rangfolge, in Punkto Logik lautet diese zumeist NOT-AND-OR, d.h. ein AND bindet stärker als ein OR. Dein Statement lautet als gerade WHERE (online=1 AND race=1) OR race=3 OR race=4 OR race=7 OR race=11. Wenn du die Priorität ändern willst verwende Klammern
WHERE online=1 AND (...)
Aber dies geht auch nicht
hast du Martins Hinweis in Punkto Fehlerbehandlung (siehe z.B. mysql_error beachtet? Hast du das Statement mal mit PHPMyAdmin oder anderweitig direkt gegen die Datenbank geschickt?
MfG
Rouven
Mahlzeit P.K.,
"SELECT online FROM characters WHERE online='1' AND race='1' OR race='3' OR race='4' OR race='7' OR race='11'";
Aber dies geht auch nicht.
"Geht nicht" geht nicht. Was genau "geht nicht"? Gibt es eine Fehlermeldung? Wie lautet sie? Gibt es keine und Du bekommst nur nicht das Ergebnis, was Du erwartest? Dann beachte das, was Rouven schrieb.
Herrje, wieso denken die Teilnehmer dieses Forums nur immer wieder, dass alle Leser hier nicht nur Postings, sondern auch Gedanken lesen können - es wäre so viel einfacher und effektiver, wenn jeder vernünftige Fehlerbeschreibungen liefern würde ...
MfG,
EKKi
Hallo Martin,
Du solltest den Rückgabewert von mysql_query() auch auf Gültigkeit prüfen, anstatt ihn gutgläubig zu verwenden. Im Fehlerfall, oder wenn keine Datensätze auf die Anfrage passen, ist er nämlich ein boolsches false
das ist Unsinn. Selbstverständlich gibt mysql_query() eine Ressourcenkennung zurück, wenn ein SELECT-Statement ausgeführt werden konnte. Dies gilt auch, wenn die Ergebnismenge leer ist. Eine Ressourcenkennung wird *immer* zu TRUE evaluiert.
Richtig ist, dass man im Fehlerfall mysql_error() befragen sollte.
Freundliche Grüße
Vinzenz