# SQL Abfrage, je nach ausgewählten Parametern



## REC (6. Sep 2011)

Hallo zusammen,
Ich hoffe ich bin hier im richtigen Unterforum.

Ich programmiere im Moment gerade an einem Projekt für meine Ausbildung. Es geht um Datenbank mit einer Website als Frontend. Es geht um eine kleine DVD Sammlung
Ich mache den Teil der Suche. Auf meiner Webseite kann man nach 

DVD-Titel,
Genre,
Schauspieler,
Preise

suchen.
Ich habe aber unten nur ein Suche Knopf. Schön wäre es jetzt wenn ich es so programmieren könnte das der Code selber merkt welche Datenfelder ausgefüllt sind und welche nicht. Das heisst je mehr ausgefüllt ist deso mehr wird die Suche eingeschränkt. DVD Titel ist ein Textfeld.Dort kann ich schon nur nach dem String suchen. Die anderen 3 sind Selectboxen, von denen bekomm ich die ID, also (Horror = 1, Action = 2 etc)

Wie kann ich das nun schlau in PHP oder SQL schreiben das man leere Felder aussortiert und die Suche-SQL richtig schreibt?


----------



## SlaterB (6. Sep 2011)

ein Zeichen nach den anderen eintippen,
Werte abfragen, if/else, SQL zusammenbauen, 
was soll man dazu schon sagen? fange an

es gibt nicht unbedingt ein schlaues Gesamtkonzept, jedenfalls ist es nicht schlau nichts zu tun und nur zu fragen,
baue nach und nach etwas auf und mit der Zeit siehst du selber was vielleicht zu optimieren ist

wenn du hier schlimme Konstrukte postest, dann ist es auch leichter sie zu korrigieren,
das ist ein normaler Prozess


----------



## REC (6. Sep 2011)

SlaterB hat gesagt.:


> ein Zeichen nach den anderen eintippen,
> Werte abfragen, if/else, SQL zusammenbauen,
> was soll man dazu schon sagen? fange an
> 
> ...



Wie kann ich den SQL zusammenbauen? Ich kann if/else Sachen ja machen, dann aber ergibt sich pro else Teil einfach ein SQL Statement. Ich meine ich kann ja nicht wissen, ob jetzt nur nach Genre gesucht wird, oder nur nach Schauspieler und Preise, etc. Es gibt so viele Möglichkeiten. Ich kann ja nun nicht alle mit verschiedene SQL's abdecken? 
Das mit dem SQL zusammenbauen hört sich sehr interessant an. Ist vielleicht frech aber könntest du mir ein einfaches Beispiel machen vom Grundgerüst? 
Naja mein Code ist ziemlich wirr, ich glaube nicht das dies viel bringt ihn hochzuladen. Ich habe im Moment noch Problem nach Umlaute zu suchen. Hat mal funktioniert mit utf8_decode. Aber jetzt will es aufeinmal nicht mehr. Darum habe ich eigentlich erst die DVD Titel suche komplett.


----------



## SlaterB (6. Sep 2011)

SQL ist ein String, da kannst du ganz normal
if (xy) { sql += " and a = b"; }
programmieren

Beispiel wie gesagt nicht unbedingt nötig, allerdings gab es das Thema durchaus schon öfter,
wenn ich nur einen Link posten muss (allerdings Suche schon wieder schwierig, nicht das beste Ergebnis in meiner Erinnerung: )
http://www.java-forum.org/datenbank...atement-unbekannter-anzahl-where-clauses.html


----------



## REC (6. Sep 2011)

Man genau dem bin ich jetzt auf der Spur  Ist ja wirklich nur ein String. Ich verfolge mal diesen Ansatz. Das Problem ist wir müssen ein bisschen PHP und SQL mischen. Und das ist extrem mühsam mit diesen ganzen ' ,"  etc. 
Mein Problem war auch wie ich die Abfrage mach ob die Felder leer sind. Aber zum Glück konnte ich in PHP einfach schreiben: 


```
if($titel2 == NULL){
        echo 'leer';
    }
    else{
        echo voll;
    }
```

Ich danke dir mal bis hierhin. Ich melde mich wenn es geklappt hat oder wenn mehr Fragen enstehen


----------



## REC (6. Sep 2011)

Mhm anscheinend ist das zusammenfügen nicht ganz einfach 

So bereite ich die $query Variable vor:


```
$query = "SELECT Titel, Filmbeschreibung, Erscheinungsjahr, GenreName FROM vfilmdetail WHERE ";
```

und hier möchte ich sie gerne um dieses Statemant erweitern


```
if($titel2 == NULL){
        echo 'leer';
    }
    else{
        $query += "Titel LIKE '%$titel2%'";
    }
```
Leider klappt das nicht. Ich nehme an das Problem liegt daran das bei WHERE mit " aufgehört wird aber bei Titel auch mit " angefangen wird? Wie kann ich das umgehen?

Am schluss führe ich dann diesen Befehl aus:  
	
	
	
	





```
$res = mysql_query($query) ;
```


----------



## Marcinek (6. Sep 2011)

Hallo,

Konkatenationen in PHP macht man mit "." (Punkt) und nicht mit "+" (Plus). 

Das hier ist ein Java Forum, also vorsicht.

Gruß,

Martin


----------



## REC (6. Sep 2011)

Hey Danke Martin, das war der Fehler ! 
Hab mich wohl ein bisschen ungenau ausgedrückt. Hätte vielleicht stärker daraufhinweisen sollen das es PHP ist.

So versuche jetzt noch den Rest:toll:


----------



## SlaterB (6. Sep 2011)

> vielleicht stärker daraufhinweisen sollen das es PHP ist.
für was, damit ich dir PHP-Code liefere? da hätte kein Hinweis geholfen

lieber stärker logisch nachdenken, welche Funktion Code-Teile haben, 
dass es um das Zusammenfügen von SQL-Bausteinen ging, war doch ziemlich klar

vielleicht auch stärker die Bedeutung von PHP-Code lernen, was dort + bedeutet usw


----------



## REC (6. Sep 2011)

Nein ich meine ja nur. Soll kein Angriff sein. Ich dachte das du vielleicht aus gewohnheit + geschrieben hast. Ich kenn nur bisschen Java. Darum habe ich auch + genommen fand das absolut richtig. Ich wusste wirklich nicht das man mit "." zusammenfügen muss. Die PHP Sachen bin ich mir im Moment im Web am zusammensuchen. Denn das hatte wir in der Schule noch gar nicht.


----------



## SlaterB (6. Sep 2011)

habe ich auch nicht als Angriff verstanden bzw. wäre mir egal, wollte dennoch deine Ansicht weiter revidieren,
nimm nie an dass jemand alles bedenkt wenn du irgendwo ein + liest, übernimmt keinen Code ohne Denkprozess einzuschalten
(auch kein bewußter Angriff, sondern Anleitungs-Ton  )

> Die PHP Sachen bin ich mir im Moment im Web am zusammensuchen. 
uiui


----------



## REC (6. Sep 2011)

Ok das was ich wollte funktioniert. Man muss halt auch noch "AND" in den String einfügen damit alle Bedinugnen erfüllt sind.


Ja ich weissd das mit dem PHP ist nicht optimal. Aber wir haben extra ein PHP Fach. Aber erst nächstes Jahr


----------

