[MySQL] Probleme bei SELECT-Abfrage, Daten werden nicht richtig gefiltert

Gürteltier

Grünschnabel
Hallo!

Ich arbeite gerade an einem "System" wo User die gewünschten Merkmale eines Produktes bestimmen und diese dann mit einer MySQL-Datenbank verglichen und anschließend ausgegeben werden sollen. Mein Problem ist nun folgendes. Sobald der erste angegebene Wert übereinstimmt werden alle Einträge mit diesem Wert angezeigt und die anderen Suchkriterien ignoriert.

Z.B. sucht ein Kunde eine Immobilie mit einer Grundstücksfläche von 600 m² und einer Hausgröße von 400 m². Nun wird vor der Ausgabe eine Unter- und Obergrenze mithilfe der angegebenen Werte erstellt. Dann kommt die SELECT - Anweisung und anschließend werden die übereinstimmenden Einträge ausgegeben. Dabei sind aber auch Einträge mit z.B. einer Grundstücksfläche von 600 m² und einer Hausgröße von 200 m² die eigentlich nicht angezeigt werden dürften.

Hier mal die SELECT-Anweisung:

Code:
$sqlab = "SELECT * FROM $table WHERE grundstücksgröße BETWEEN '$gr_k' AND '$gr_g' OR NULL 
AND hausgröße BETWEEN '$ha_k' AND '$ha_g' OR NULL 
AND zimmer BETWEEN '$zi_k' AND '$zi_g' OR NULL
AND preis BETWEEN '$pr_k' AND '$pr_g' OR NULL 
AND dachtyp LIKE '$da' OR NULL
AND steintyp LIKE '$se' OR NULL";
 
Hast Du schon mal ein "echo $sqlab;" probiert?
Das zeigt Dir an, welches select Statement an die Datenbank übergeben wird.
Vielleicht kannst Du dadurch ja einen Fehler erkennen (das hilft mir bei sochen Problemen immer weiter).
Wenn Dir das nicht hilft, poste mal, was Dir mit "echo $sqlab;" ausgegeben wird.

redlama
 
Sry das ich das mit nem Doppelpost hier pushe, aber ich konnte meinen alten Post nicht löschen und editieren erfüllt den Sinn des pushens nicht...

So ich hab das ganze mal ausprobiert, aber ich konnte leider keine Erkenntnisse draus ziehen. Wahrscheinlich ist der Fehler dick und fett vor meinen Augen aber durch das Suchen ist mein Blick getrübt... Na ja wie auch immer hier mal das Ergebnis des echo "$sqlab"; und was die Anfrage ergeben hat.

Ergebnis des echo "sqlab";

SELECT * FROM Einfamilienhaus WHERE grundstücksgröße BETWEEN '550' AND '650' OR NULL AND hausgröße BETWEEN '50' AND '150' OR NULL AND zimmer BETWEEN '4' AND '5' OR NULL AND preis BETWEEN '75000' AND '110000' OR NULL AND dachtyp LIKE '100' OR NULL AND steintyp LIKE '201' OR NULL

Ergebnis der Anfrage:

Grundstücksgröße 600
Hausgröße 200
Zimmer 5
Preis 225000
Dachtyp Mansarddach
Steintyp Putz

Ich hab die Abweichungen zur besseren Erkenntnis eingefärbt. Ich hoffe ihr seht, was ich übersehe
 
Zuletzt bearbeitet:
Vielleicht hilft es, wenn Du die einzelnen Bedingungen einklammerst, ...
Code:
SELECT * FROM Einfamilienhaus WHERE (grundstücksgröße BETWEEN '550' AND '650' OR NULL) AND (hausgröße BETWEEN '50' AND '150' OR NULL) AND (zimmer BETWEEN '4' AND '5' OR NULL) AND (preis BETWEEN '75000' AND '110000' OR NULL) AND (dachtyp LIKE '100' OR NULL) AND (steintyp LIKE '201' OR NULL)

redlama
 
Vielen Dank, jetzt funktioniert die Anweisung zwar nicht 100% wie ich es wollte, kommt dem aber schon ein Stück näher ;)

Und wie immer lag die Lösung direkt vor mir und ich hab sie nicht gesehen -.-
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück