PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: MySQL-Abfrage


dnZz
2023-12-06, 16:15:04
Hallo, ich sehe wohl gerade den Wald vor lauter Bäumen nicht. Eigentlich eine simple SQL Abfrage, die aber ein falsches Ergebnis liefert.

Ich frage in einer Tabelle die Anzahl von Geräten ab, die eine bestimmte MAC Adresse haben. Abfrage sieht so aus:

$queryx5rv3 = 'SELECT COUNT(*) FROM einwahl WHERE Anlage LIKE "%X5R%" AND (mac LIKE "%00-1A-E8-C6%" OR mac LIKE "%00-1A-E8-C7%" OR mac LIKE "%00-1A-E8-C8%" OR mac LIKE "%00-1A-E8-C9%" OR mac LIKE "%00-1A-E8-CA%" OR mac LIKE "%00-1A-E8-CB%")';

Die Abfrage liefert auch die korrekte Anzahl zurück.
Nun Frage ich alle anderen Gerät ab, also die die eine andere MAC Adresse haben (im 4. Feld der MAC steht kein C6 bis CB).

$queryx5r = 'SELECT COUNT(*) FROM einwahl WHERE Anlage LIKE "%X5R%" AND (mac NOT LIKE "00-1A-E8-C6%" OR mac NOT LIKE "00-1A-E8-C7%" OR mac NOT LIKE "00-1A-E8-C8%" OR mac NOT LIKE "00-1A-E8-C9%" OR mac NOT LIKE "00-1A-E8-CA%" OR mac NOT LIKE "00-1A-E8-CB%")';

Liefert mir ein flasches Ergebnis, ich erhalte die Anzahl aller Datensätze die im Feld "Anlage" "X5R" stehen haben.

Wo ist bei der 2. Abfrage der Fehler?

_CaBaL_
2023-12-06, 16:30:08
Ich glaube die NOT LIKE OR Kombination ist das Problem

Sofern die MAC Adresse NOT LIKE Deine erste Angabe ist, werden die weiteren OR Pfade gar nicht geprüft

Du müsste NOT LIKE AND machen, wenn Du alle mit dieser expliziten MAC ausklammern nöchtest :)

Matrix316
2023-12-06, 16:42:03
Also bei der zweiten Abfrage fehlt glaube ich das % vorne bei den Mac Adressen. Oben bei der ersten steht noch ein % vorne. :)

also

mac LIKE "%00-1A-E8-C6%"

vs

mac LIKE "00-1A-E8-C6%"

Oder? Das erste "not like" sollte die anderen eigentlich nicht stören, wenn die mit "or" getrennt sind. Dafür ist ja "or" da. Wobei da alle mit or verbunden sind, sind alle anderen auch wieder mit im Spiel. Man müsste eigentlich alles mit "and" verbinden, damit die auch wirklich ausgeschlossen sind. Also wenn man schreibt "select a from Tabelle where a is not 1 or a is not 0" dann wird man trotzdem alle mit 1 und 0 bekommen durch das or. Der fragt dann beim ersten 1 dann wahrscheinlich: Bist du nicht 1? Nein oder nicht 0? Ja also Ja. :D Oder so ähnlich. ;) Also muss man fragen bist du nicht 1 und nicht 0.

dnZz
2023-12-06, 17:19:07
Ich glaube die NOT LIKE OR Kombination ist das Problem

Sofern die MAC Adresse NOT LIKE Deine erste Angabe ist, werden die weiteren OR Pfade gar nicht geprüft

Du müsste NOT LIKE AND machen, wenn Du alle mit dieser expliziten MAC ausklammern nöchtest :)

Ja klar :rolleyes: manchmal braucht man nur einen Schubs. Mit AND anstatt OR in der Klammer funktioniert es. Danke für den Denkanstoß!

nairune
2023-12-06, 20:21:59
Du kannst auch einfach ein NOT vor die Klammer setzen und den Inhalt der Klammer mit den ORs identisch lassen ;)

_CaBaL_
2023-12-07, 09:03:15
Ja klar :rolleyes: manchmal braucht man nur einen Schubs. Mit AND anstatt OR in der Klammer funktioniert es. Danke für den Denkanstoß!

Passiert uns allen mal :D

Gohan
2023-12-07, 14:39:27
Boolesche Algebra muss man halt können! ;)