# MySQL Abfrage: Wenn Feld leer, alles anzeigen



## schina02 (12. Jun 2012)

Heyho!

Der Titel ist jetz nicht so dolle, tut mir leid 

Also schreibe an einem ImmobilienScout Programm und bin jetzt bei der Suche nach Immobilien mit 3 Textfeldern:

txtSucheOrt -> Ort eingeben
txtSucheZimmer -> Zimmer mindestens
txtSuchePreis -> Preis maximal

das ist meine qsl-abfrage dazu:

```
"select id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis " + "from sortiment WHERE preis <= " +
  txtSuchePreis.getText() + " and zimmer >= " + txtSucheZimmer.getText() + " and ort LIKE '" + txtSucheOrt.getText() +
  "%'" + " order by preis asc";
```

jetzt möchte ich folgendes: *wenn man txtSucheZimmer oder txtSuchePreis GANZ frei lässt, soll er nach alle anzeigen.* so wie ich jetzt habe, bricht er die suche ab.

gibt es dafür einen schicken sql operator? zb. 

```
SELECT * FROM sortiment WHERE preis <= " + txtSuchePreis.getText() + " OR EGAL
```
:applaus:


----------



## Evil-Devil (12. Jun 2012)

Du müsstest lediglich deinen Query dynamischer als jetzt zusammensetzen.

Also als Grundlage den Query für alle schreiben und je nachdem ob eine gewünschte Bedingung aus dem Formular gewählt wurde die WHERE Bedingung ergänzen.


----------



## schina02 (12. Jun 2012)

mist, einfacher geht es leider nicht, ja?


----------



## Evil-Devil (12. Jun 2012)

Ist doch einfach...du könntest auch n SQL Abfragen vorbereiten, das wäre imho aber totaler Mist.


----------



## schina02 (12. Jun 2012)

Evil-Devil hat gesagt.:


> Also als Grundlage den Query für alle schreiben und je nachdem ob eine gewünschte Bedingung aus dem Formular gewählt wurde die WHERE Bedingung ergänzen.



kannst du mir das näher erklären? steig da grad nicht hinter


----------



## Evil-Devil (15. Jun 2012)

Bin nun doch den SQL Weg gegangen...sollte funktionieren.
[sql]
select	id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis
from	sortiment
WHERE	preis <= txtSuchePreis.getText()
and (
	(
	zimmer >= 0
	)
	or
	(
	zimmer >= txtSucheZimmer.getText() 
	and	ort LIKE '" + txtSucheOrt.getText()
	)
)
order by preis asc
[/sql]

Also der maximale Preis ist immer Bedingung. Für deine "Zimmer und Ort leer" Bedingung hab ich als Grundlage genommen das Zimmer immer größer gleich 0 ist.
Falls nun doch jemand in beide Felder was eingetragen hat wird das berücksichtigt im anderen Oder.

Bei Java hätte ich halt den Ansatz gewählt wie:

```
String meinString = "select	id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis
from	sortiment
WHERE	preis <= " + txtSuchePreis.getText();

if (txtSucheZimmer.getText() != "") {
     meinString.concat(" and zimmer >= " + txtSucheZimmer.getText());
}

if (txtSucheOrt.getText() != "") {
     meinString.concat(" and ort like '" + txtSucheOrt.getText() + "%'");
}
```
So in etwa könnte ich es mir vorstellen. Der StringBuilder wäre vielleicht eine bessere Wahl.
Einfach mal probieren


----------

