Leider habe ich schon wieder ein MySQL Problem , an welchem ich mir die Zähne ausbeiße. Es ist - versprochen - das letzte dieser Art. Konkret möchte ich Checkboxen in die Suchfunktion meiner Internetseite einbauen. Zu Demonstrationszwecken habe ich eine kleine Datenbank erstellt, welche Musiker, deren Herkunftsland (Anname 1:n Beziehung) und die jeweilige Musikrichtung beinhaltet (m:n Beziehung):
±-------------±--------------------±--------+
| interpret_id | interpret_name | land_id |
±-------------±--------------------±--------+
| 1 | Green Blues Band | 1 |
| 2 | Pop Big Band Bern | 3 |
| 3 | Jon Doe Crew | 1 |
| 4 | Pop Sound Orchestra | 3 |
| 5 | Hans Maier Band | 2 |
±-------------±--------------------±--------+ (Tabelle: interpret)
±--------±------------+
| land_id | land_name |
±--------±------------+
| 1 | Deutschland |
| 2 | Österreich |
| 3 | Schweiz |
±--------±------------+ (Tabelle: land)
±---------±-----------+
| genre_id | genre_name |
±---------±-----------+
| 1 | Blues |
| 2 | Pop |
| 3 | Rock |
| 4 | Soul |
±---------±-----------+ (Tabelle: genre)
±-------------±---------+
| interpret_id | genre_id |
±-------------±---------+
| 1 | 1 |
| 1 | 3 |
| 2 | 2 |
| 3 | 3 |
| 3 | 4 |
| 4 | 2 |
| 5 | 2 |
| 5 | 3 |
±-------------±---------+ (Tabelle: interpret_genre)
Dazu mein Suchformular (vereinfacht):
Interpret (Input Text):
Land (Select):
DeutschlandÖsterreichSchweiz
Genre (Checkbox):
Blues
Pop
Rock
Soul
Und schließlich mein PHP Skript (wiederum vereinfacht):
<?php $interpret_name = $_GET['interpret_name'];$land\_id = $\_GET['land\_id']; // leere Checkboxen werden anscheinend nicht übergeben if isset ($\_GET['genre\_id']) { $genre\_id = $\_GET['genre\_id']; } else { $genre\_id = ''; $db = new mysqli ('localhost', 'root', '', 'musik'); $query = "select interpret.\*, land.land\_name, group\_concat(distinct genre.genre\_id separator ', ') as genre\_id, group\_concat(distinct genre.genre\_name order by genre.genre\_id separator ', ') as genre\_name from interpret join land on interpret.land\_id = land.land\_id join interpret\_genre on interpret.interpret\_id = interpret\_genre.interpret\_id join genre on interpret\_genre.genre\_id = genre.genre\_id where (interpret.interpret\_name like '%$interpret\_name%' or '' = '$interpret\_name') and (land.land\_id = '$land\_id' or '' = '$land\_id')"; $result-\>query($query); ?\> Leider verstehe ich nicht, wie die Checkboxen in die Suche eingebracht werden können. Die Checkboxen sollen mit einem "oder" verknüpft sein (z.B.: zeige alle Rock ODER Blues Musiker aus Deutschland). Ich vermute, die Suche muss über zwei Abfragen realisiert werden. Zuerst werden die passenden Interpreten (interpret\_id) gesucht und schließlich werden alle Daten mithilfe der gefundenen Interpreten (interpret\_id) ausgegeben. Liege ich mit dieser Vermutung richtig? Hat bereits jemand hier im Forum eine Suchfunktion mit Checkboxen erstellt und hat den ein oder anderen Tipp für mich? Schöne Grüße