Forenindex » Programmierung/Entwicklung » PHP und MySQL » Hilfe.... Fehlerhafte SQL-Abfrage

Hilfe.... Fehlerhafte SQL-Abfrage

Anonym
Beiträge gesamt: 22827

17. Jun 2004, 09:37
Bewertung:

gelesen: 955

Beitrag als Lesezeichen
Ich habe folgendes Problem.....

Ich habe für eine Community eine Usersuche programmiert, in welcher ich aus der DB die User nach verschiedenen Kriterien gesucht habe, wie z.B. "Alter zwischen 25 und 30" und "Ort" oder "PLZ".... usw.

Leider musste ich feststellen, dass die suche fehlerhaft wurde,
sobald mehrere "AND" bzw. "OR" -Abfragen in einem rutsch gemacht wurden.


$abfrage ="SELECT from $tabelle_daten USER WHERE (AGE between '$alter1' AND '$alter2') AND '$ort' OR '$plz'";
$ergebnis = mysql_query($abfrage);

Diese Abfrage geht ja noch, aber wenn es mehr wird stimmt die Abfrage bzw. das Ergebnis nicht mehr.
Kann man das Ergebnis vielleicht in ein Array schreiben und in diesem Array nach weiteren Merkmalen der Person suchen, um die Suche zu verfeinern?

Wenn "Ja" wie muss ich sowas programmieren......???
Wenn "Nein" wie programmiere ich die o.g. Abfrage richtig, damit die Ergebnisse stimmen?

Wäre klasse wenn mir da jemand helfen könnte. :-)

Danke für Eure Hilfe schonmal im vorraus.

Gruß Phil

Hilfe.... Fehlerhafte SQL-Abfrage

oesi50
  
Beiträge gesamt: 2315

17. Jun 2004, 09:55
Bewertung:

gelesen: 955

Beitrag als Lesezeichen
hallo Phil,

ich vermute mal, hier fehlen nur Klammern.

... age AND (ort OR plz)

alte Regel aus der Schule: Punktrechnung geht vor Strichrechnung

Punktrechnung: AND
Strichrechnung OR

Eselsbrücke:

age * ort + plz
gibt was anderes als:
age * ( ort + plz )

Änderst Du jedes Jahr die Spalte AGE?


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)

(Dieser Beitrag wurde von oesi50 am 17. Jun 2004, 09:58 geändert)

Hilfe.... Fehlerhafte SQL-Abfrage

Anonym
Beiträge gesamt: 22827

17. Jun 2004, 10:44
Bewertung:

gelesen: 955

Beitrag als Lesezeichen
hi Oesi,

mit Klammersetzung habe ich auch schon rumgetüftelt.....
Aber auch hier habe ich das Problem, dass das Ergebnis, bei mehreren Suchmerkmalen (die vom Suchformular übergeben werden), nicht mehr stimmen.
Ich brauche ja leider nicht nur Alter, Ort und PLZ, da sind ja noch einige Kriterien mehr....

Und Du bist sicher, dass es nur an den Klammern liegt?

Hmmmmm.... kann man das denn nicht vereinfachen, indem man immer nur ein Merkmal nach dem Anderen sucht?
Also indem man das 1. Suchergebnis (z.b. Alter) in einem Array speichert und dort dann weiter nach allen Treffern sucht, die mit einem bestimmten Ort zu tun haben usw. bis alle Merkmale verarbeitet wurden?

Vielleicht hat da ja jemand eine Idee.

Würde mich vor den Klammern bewahren :-)....

Danke nochmal für Eure Hilfe
Gruß Phil

Hilfe.... Fehlerhafte SQL-Abfrage

oesi50
  
Beiträge gesamt: 2315

17. Jun 2004, 10:54
Bewertung:

gelesen: 955

Beitrag als Lesezeichen
Beschreib doch mal Dein Problem verbal. Daraus ergibt sich im allgemeinen automatisch die Lösung.

Die Idee mit einem Array mag ja ganz schön sein, aber wozu braucht man dann ein Datenbanksystem?

Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)

Hilfe.... Fehlerhafte SQL-Abfrage

Miro Dietiker
Beiträge gesamt: 699

17. Jun 2004, 12:18
Bewertung:

gelesen: 955

Beitrag als Lesezeichen
$abfrage ="SELECT from $tabelle_daten USER WHERE (AGE between '$alter1' AND '$alter2') AND '$ort' OR '$plz'";

Kann es sein, dass du vergessen hast die Spalten zu erwähnen bei
den hinteren zwei Ausdrücken?

$abfrage ="SELECT from $tabelle_daten USER WHERE (AGE between '$alter1' AND '$alter2') AND ORT='$ort' OR PLZ='$plz'";

Ein weiterer wichtiger Punkt ist noch, dass man die Werte
$ort, $plz, $alter1, $alter2
Unbedingt escapen muss, da sonst die Abfrage unsicher ist und
zumindest bei der Eingabe von dem Zeichen ' ins Suchkriterium
ein Fehler ausgibt..

... mysql_escape_string($plz) ...

GrEeZ: Miro Dietiker