Black out mit Join abfrage

zmedia

Angesehenes Mitglied
Hi Leute

Ich habe da ein Blackout, vielleicht kann mir wer weiterhelfen; folgendes:

Mit dieser Joinabfrage lese ich Daten aus der DB aus. Nun möchte ich zusätzlich der Abfrage folgenden Befehl mitgeben. Zeige die Daten mit der Sprache welche in der Var $sprache enthalten ist, falls keine übereistimmung gefunden wird zeige den Datensatz mit der default Spache (de) an.

CODE $abfrage_box = mysql_query ("SELECT t0.content, t0.titel, t0.id_box, t0.id_seite, t0.id_partner, t0.update_time , t0.style, t0.type, t0.modul, t0.status, t0.sprache
FROM $tab_content_box t0
LEFT JOIN $tab_content_box t2 on t2.update_time <= '$datum_jetzt' && t2.id_seite = '$id1' && t0.id_partner = t2.id_partner and t0.update_time < t2.update_time
where t0.id_seite = '$id1' && t0.update_time <= '$datum_jetzt' && t2.id_partner is NULL order by t0.id_partner asc ");


In dieser Joinabfrage sollte diese neue Bedingung einfliessen, nur habe ich zur Zeit einen klemmer. :)

Thx René
 
Kann mir hier denn niemand weiter helfen?
huh.gif


Gibt es eine Möglichkeit in einem Query eine if else schlaufe eizubauen?
 
Hmm, ein möglicher Lösungsansatz. Nicht sehr schön, aber müsste funktionieren

CODE $abfrage_box = mysql_query("SELECT t0.content, t0.titel, t0.id_box, t0.id_seite, t0.id_partner, t0.update_time , "
."t0.style, t0.type, t0.modul, t0.status, t0.sprache "
."FROM $tab_content_box as t0 "
."LEFT JOIN $tab_content_box t2 on t2.update_time <= '$datum_jetzt' "
."&& t2.id_seite = '$id1' && t0.id_partner = t2.id_partner and t0.update_time < t2.update_time "
."where t0.id_seite = '$id1' && t0.update_time <= '$datum_jetzt' && t2.id_partner is NULL "
."&& t0.sprache = '$sprache' "
."order by t0.id_partner asc);

// Prüfen ob Datensatz vorhanden
$num_rows = mysql_num_rows($abfrage_box);

if ($num_rows == 0) {

// Keine Datensätze -> Defaulwert
$abfrage_box = mysql_query("SELECT t0.content, t0.titel, t0.id_box, t0.id_seite, t0.id_partner, t0.update_time , "
."t0.style, t0.type, t0.modul, t0.status, t0.sprache "
."FROM $tab_content_box as t0 "
."LEFT JOIN $tab_content_box t2 on t2.update_time <= '$datum_jetzt' "
."&& t2.id_seite = '$id1' && t0.id_partner = t2.id_partner and t0.update_time < t2.update_time "
."where t0.id_seite = '$id1' && t0.update_time <= '$datum_jetzt' && t2.id_partner is NULL "
."&& t0.sprache = 'de' "
."order by t0.id_partner asc);
}
 
Hi Alonso

Danke für den Versuch, leider habe ich diese Möglichkeit auch schon verworfern.

So kann ich nur generell auwählen, wenn gar keine Sprache vorhanden ist zeige alle Datensätze mit Deutsch.

Ich möchte das ganze aber vermischen, zeige mir nur jeden einzelnen Datensatz in seiner Sprache oder in Deutsch.

Zudem war mein Ansporn, kein weiterer Query erstellen zu müssen.

Ich hoffe es einigermassen verständlich geschieben zu haben.
 
QUOTE (z-web @ Di 5.7.2005, 22:01)Gibt es eine Möglichkeit in einem Query eine if else schlaufe eizubauen?

Kommt drauf an, ob MySQL eine Art IF-Anweisung unterstützt. In Access gibts dafür Iif, in Oracle und SQL Server gibts das Case Statement. Vereinfachtes Beispiel:

SELECT
case $sprache
when F then t0.content_f
when E then t0.content_e
when I then t0.content_i
else t0.content_d
end ,
t0.titel, t0.id_box, t0.id_seite, t0.id_partner, t0.update_time
FROM $tab_content_box t0

wobei die sprachifizierten Texte jeweils in Datenfeldern namens Content_Sprachabkürzung stehen.

Genauer kann ichs leider nicht, da ich weder MySQL noch PHP kenne.

Griessli
Irene
 
QUOTE (z-web @ Di 5.7.2005, 23:18) Ich möchte das ganze aber vermischen, zeige mir nur jeden einzelnen Datensatz in seiner Sprache oder in Deutsch.

Zudem war mein Ansporn, kein weiterer Query erstellen zu müssen.

Verstehst du unter einem Datensatz eine einzelne Spalte/Feld? Falls ja, wird es relativ schwierig das gesuchte zu erreichen..
 
Ja, genau Alonso das meine ich.

Jede Zeile ist ein neuer Datensatz. Ne Knacknuss was.

Danke auch Irene und Sasche für Eure Wertvollen Tips!

Da muss ich mich mal durchlesen und studieren.
 
Fazit:

Ich glaube mein Problem kann ich so nicht lösen, werde wohl oder über das ganze mit mehreren Querys machen müssen.

Die ganze Geschichte mit If oder CASE wird, nach meinen Test immer vor der When prozedur einfliessen; darum ist das Ergebnis das selbe wie bei der Lösung von Alonso. Leider wird auch nur entweder oder auf die ganze Abfrage bezogen und nicht auf einzelne Zeilen herunter gebrochen.

Tja, war ein Versuch eine komplexe Abfrage in eine Query zu packen. Nun mache ich es wie gewohnt!

Danke dennoch für Eure Tipps.

Gruss René
 
Eben, und alles was du im When änderst, wirkt sich (glücklicherweise) immer auf den kompletzten Datensatz aus. Was du noch versuchen könntest, wäre etwas mit der Funktion "IFNULL" zu erreichen. Ist eine Spalte Leer (NULL), kannst du dies so detektieren und einen defaultwert setzen.

Edit:
Habe gerade ein bisschen zum Thema rumgegoogelt, und bin dabei auf das da gestossen. Könnte dir ev. weiterhelfen..
 
Zurück
Oben