- Code: Select all
books
id|name
1 | "Harry Potter 1"
2 | "Harry Potter 2"
3 | "Harry Potter 3"
languages
id|language
1 |English
2 |German
3 |Italian
4 |French
book_translation
id|book_id|language_id|title
1 |1 |1 |"Harry Potter and The Philosophers Stone"
2 |1 |2 |"Harry Potter und der Stein der Weisen"
3 |1 |3 |"Harry Potter e la Pietra Filosofale"
4 |2 |1 |"Harry Potter and the Chamber of Secrets"
5 |2 |4 |"Harry Potter et la Chambre des secrets"
6 |3 |3 |"Harry Potter e il Prigioniero di Azkaban"
7 |3 |3 |"Harry Potter à L'école des Sorciers"
book_id -> Foreign Key für books(id)
language_id -> Foreign Key für languages(id)
Wenn der Nutzer mit deutscher Spracheinstellung nun also "Har" eingibt, soll er die Titel der drei Bücher erhalten, aber nicht den Titel ein- und desselben Buches in mehreren Sprachen. Da er die language_id seiner Webseite mitschickt, soll er auch den deutschen Titel erhalten, wenn vorhanden. Entsprechend soll von den Einträgen mit der book_id = 1 nur derjenige mit der language_id = 2 genommen werden. Sollte jedoch eine Buchtitelübersetzung nicht existieren, soll die 2. Wahl Englisch (language_id = 1) sein. Entsprechend soll der Nutzer bei der Gruppe book_id = 2 nur jenen Titel zu sehen bekommen, der die language_id = 1 hat. Da jedoch die Gruppe mit der book_id = 3 weder in der übersandten Sprache (=2) noch in Englisch (=1) vorliegt, soll einfach der nächste Eintrag dieser book_id aus der Datenbank gewählt werden (Italienisch).
weiteres Beispiel:
Eingabe: title LIKE "%il%", language_id = 2
gewünschte Ausgabe:
- Code: Select all
[
[book_id => 1, language_id => 1, title => "Harry Potter and The Philosophers Stone"],
[book_id => 3, language_id => 3, title => "Harry Potter e il Prigioniero di Azkaban"]
]
Ich habe leider keine Ahnung, wie ich diese Kombination von GROUP BY und IF-ELSE umsetzen kann und hoffe auf eure Hilfe.