[mysql] Fallunterscheidung - Existenz eines Eintrags

KristophS

Erfahrenes Mitglied
Hallo,
Ich baue z.Zt eine Seite die 2 Sprachig aufgebaut ist.
Daher ist auch der Content bilingual.
Da das Schreiben einer 2 Version des Contents aber optional ist, will ich nun prüfen ob der Eintrag exisitert und wenn ja diesen auswählen ,ansonten einen andern.

Sie beruht auf PHP und mySQL und ich möchte eine mysql Lösung finden.

Die Sprache ,deren Wert der Content haben soll, wird über eine Variable ,die den Typ Integer hat übergeben.
Der Query sieht so aus:

Code:
SELECT Inhalt WHERE lang =  ".(int)$_GET['language']."

Mein Problem ist es ,dass ich nicht prüfen kann ob ein Eintrag existiert.
Im MYsql Manual habe ich zwar verschiedene Möglichkeitnen gefunden - das CASE Konstrukt würde z.B. passen - doch weiß ich nicht wie ich herausfinden kann ob dieser eintrag existiert ,ich kann ja schlecht einen = NULL Vergleich machen.
 
Zuletzt bearbeitet:
Ich hätte eine ganze andere Idee, sofern ich dich richtig verstanden habe ;)
Du nimmst einfach eine Tabelle und machst 3 Splaten
id, inhhalt_de und inhalt_en
Dann machst du einen Select für die gewünschte Sprache und wenn das Ergebnis > 0 ist, dann existiert der Text für die Sprache.
Wenn dem nicht so ist, weißt du, dass der Text nicht in der gewünschten Sprache existiert.
Also machst du dann Select für die andere Sprache. Und schon hast den Gewünschten Text.
Mit der id steuerst du welchen Text du möchtest (WHERE ID ='$text_id').

Verständlich? So würde ich das machen
 
Ersteinmal ist das ein Feld immer leer ,also unnötig vorhanden.
Zweitens ist dies ja eine PHP bzw. nicht Sql Idee welche ich kategorisch im obigen Post ablehnte.
Es wäre sicher auch noch anders ,auch nur mit Sql, zu lösen ,doch mit keiner der anderen Möglichkeiten brauche ich nur einen Query.
Da diese Content Abfrage aber bis zu 14 Mal An Unterschiedlichen stellen vorkommt und mit unterschiedlichen Kontext, will ich da nicht noch zusätzliche Last reinbringen und die Übersichtlichkeit zugrunde machen.
 
Zuletzt bearbeitet:
Hallo KristophS,

wenn Du die beiden Spalten hintereinander stehen hättest, wäre das ganz einfach zu lösen:
PHP:
SELECT IFNULL(inhhalt_de, inhalt_en) 
FROM Tabelle WHERE id=1
Dann würde er immer erst mal gucken, ob er den deutschen Text dazu hat und sonst den englischen nehmen.



Hilfetext dazu von http://www.crazygrrl.com/weav/mysql3.php3 :
IFNULL() takes two arguments. If the first is not NULL, it will be returned. If it is NULL, the second will be returned. For example:
SELECT IFNULL((Charge / Number), 0);



Wenn Du mySql ab v4.1 nutzt, solltest Du es auch so machen können:
PHP:
"SELECT IFNULL(SELECT t.inhalt WHERE lang =  ".$lang1."),SELECT t.inhalt WHERE lang =  ".$lang2.") FROM Tabelle t"
Habe keines getestet, also bitte nicht schlagen, wenn's nicht gehen sollte. :)
 
Auch wenn es mir nicht schmeckt das ein Feld damit immer null ist,wohl die einzige Möglichkeit.

Allerdings verstehe ich nicht so ganz wie das arbeitetn soll, da ich ja nicht mit den $_GET['langeuage'] Wert arbeiten kann.

Muss ich also immer eine PHP lösung vorschiebe die unterschiedliche Query ausruft (da ich nicht auf deine 2.Lösung zurückgreifen will)?
 
Zuletzt bearbeitet:
Kommt drauf an, wie dein bisheriges Programm funktioniert.
Es sagt ja auch keiner, dass es nicht noch andere Wege gibt, Dein Problem zu lösen.

Du musst aber schon irgendwie angeben, welche Sprache du bevorzugt haben willst und welche Sprache denn die andere ist.
 
Kommt drauf an, wie dein bisheriges Programm funktioniert.
Es sagt ja auch keiner, dass es nicht noch andere Wege gibt, Dein Problem zu lösen.

Du musst aber schon irgendwie angeben, welche Sprache du bevorzugt haben willst und welche Sprache denn die andere ist.
Also die Seite baut ja bekanntermassen auf Deutsch und Englisch auf.
Da aber die Betreiber fast durchgehend deutsch sprachig sind, will ich diesen Check nur durchführen wenn es die Englische Version ist,diese also optional halten (steht glaube ich auch weiter oben).

Daher brauche ich ja 2 Unterschiedliche Querys,da man ja unterschiedliche Abfragen abschicken muss .
Also für die Englische Sprache, den Query mit Optionaler Prüfung bei der deutschen ohne.
Obwohl man da sicherlich auch eine andere Lösung nehmen könnte, doch fällt mir da nichts sauberes ein, weil das Eintragen von Deutschen Content Pflicht ist und somit auf jeden Fall in der Datenbank besteht.

Das bisherige selektiert nur recht einfach Daten, und das drumherum ist eine schlichte Ausgabe.

Außerdem will ich es auch nicht unnötig verkomplizieren,diese einfache Prüfung entspricht genau dem was ich will.
 
Zuletzt bearbeitet:
Dann scheint Dir ja so schon gedient zu sein - freut mich. :)

Zu den zwei Abfragen: Du könntest natürlich auch immer die bevorzugte Sprache und die Zweitsprache übergeben. Wenn Du Englisch al erste angibst, findet er also bevorzugt englischen Content und wenn Du deutsch als erste angibst, immer den deutschen (Es sei denn, da hat doch mal einer gepennt...).
Damit würdest Du für beide Abfragen die selbe Abfrage (mit dynamischen Parametern) verwenden können...:)
 
Zurück