hilfdirselbst.ch
Facebook Twitter gamper-media
Anonym
Beiträge: 22827
17. Jun 2004, 09:37
Beitrag #1 von 5
Bewertung:
(771 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hilfe.... Fehlerhafte SQL-Abfrage


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 Top
 
X
oesi50  A  S
Beiträge: 2315
17. Jun 2004, 09:55
Beitrag #2 von 5
Beitrag ID: #91488
Bewertung:
(771 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hilfe.... Fehlerhafte SQL-Abfrage


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)
als Antwort auf: [#91485]
(Dieser Beitrag wurde von oesi50 am 17. Jun 2004, 09:58 geändert)
Top
 
Anonym
Beiträge: 22827
17. Jun 2004, 10:44
Beitrag #3 von 5
Beitrag ID: #91503
Bewertung:
(771 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hilfe.... Fehlerhafte SQL-Abfrage


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
als Antwort auf: [#91485] Top
 
oesi50  A  S
Beiträge: 2315
17. Jun 2004, 10:54
Beitrag #4 von 5
Beitrag ID: #91508
Bewertung:
(771 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hilfe.... Fehlerhafte SQL-Abfrage


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)
als Antwort auf: [#91485] Top
 
Miro Dietiker
Beiträge: 699
17. Jun 2004, 12:18
Beitrag #5 von 5
Beitrag ID: #91550
Bewertung:
(771 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hilfe.... Fehlerhafte SQL-Abfrage


$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
als Antwort auf: [#91485] Top
 
X