[MYSQL] if Bedingung in SELECT

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [MYSQL] if Bedingung in SELECT

    Hallo zusammen,
    ich habe mal wieder ein kleines Problem mit Mysql.
    Hier mal der aktuelle Code:

    Quellcode

    1. SELECT a.`VerfAb`,a.`Startanz`,a.`Bold`,b.`Text`
    2. FROM `p_inkl` AS a
    3. LEFT JOIN `p_inkl_texte` AS b ON b.`InklID` = a.`TID` AND b.`Sprache` = '".$used['lang']."'
    4. WHERE a.`PID` = '".$item['TID']."' AND a.`Aktiv` = '1' ORDER BY a.`VerfAb` ASC ,a.`Anordnung` ASC


    $item['TID'] = ID (Zahl)
    $used['lang'] = Länderkennung (de, en, fr usw.)

    Ich möchte nun eine Abfrage machen, wenn b.`Sprache` = '".$used['lang']."' = NULL ist soll er die Zeile mit b.`Sprache` = '".$default_lang."' laden. Also wenn die Zeile mit der Sprache nicht vorhanden ist soll er die mit der Default Sprache laden. Kann man das in einer SELECT Anweisung verpacken?? Wenn ja, wie mach ich das??

    Vielen dank für eure Hilfe.

    MfG
    boyge

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von boyge ()

  • Hallo Bodo06,

    wow vielen Dank für die schnelle Antwort. Das hatte ich mir auch angeguckt, habe aber jetzt beim 2ten gucken begriffen wie es geht:

    Quellcode

    1. SELECT b.`Sprache`,a.`VerfAb`,a.`Startanz`,a.`Bold`,b.`Text`,b.TID
    2. FROM `p_inkl` AS a
    3. LEFT JOIN `p_inkl_texte` AS b ON b.`InklID` = a.`TID` AND b.`Sprache` = CASE WHEN b.`Sprache` = 'en' THEN 'en' ELSE 'de' END
    4. WHERE a.`PID` = '7' AND a.`Aktiv` = '1' ORDER BY a.`VerfAb` ASC ,a.`Anordnung` ASC


    So hat's funktioniert. Vielen Vielen Dank

    MfG
    boyge
  • Okay ist doch noch nicht erledigt, denn jetzt habe ich das Problem, wenn ich das jetzt so abrufe und sowohl ein Element mit 'en' und 'de' habe, dann bekomme ich beide ausgegeben. Das soll natürlich nicht sein. Gibt's da vielleicht noch ein Tipp??

    InklID ist da das Problem. Die darf nicht doppelt sein und 'en' sollte den Vorrang haben.

    Habe die Abfrage zum Verständnis etwas angepasst:

    Quellcode

    1. SELECT a.TID AS p_inkl_tid,b.`Sprache`,a.`VerfAb`,a.`Startanz`,a.`Bold`,b.`InklID`,b.TID AS `p_inkl_texte_tid`
    2. FROM `p_inkl` AS a
    3. LEFT JOIN `p_inkl_texte` AS b ON b.`InklID` = a.`TID` AND b.`Sprache` = CASE WHEN b.`Sprache` = 'en' THEN 'en' ELSE 'de' END
    4. WHERE a.`PID` = '7' AND a.`Aktiv` = '1' ORDER BY a.`VerfAb` ASC ,a.`Anordnung` ASC


    ERGEBNIS:

    Brainfuck-Quellcode

    1. p_inkl_tid | Sprache | VerfAb | Startanz | Bold | InklID | p_inkl_texte_tid
    2. ===========+=========+========+==========+======+========+=================
    3. 62 | de | 0 | 1 | 1 | 62 | 39
    4. -----------+---------+--------+----------+------+--------+-----------------
    5. 62 | en | 0 | 1 | 1 | 62 | 99999
    6. -----------+---------+--------+----------+------+--------+-----------------
    7. 63 | de | 0 | -1 | 0 | 63 | 40
    8. -----------+---------+--------+----------+------+--------+-----------------
    9. 64 | de | 0 | -1 | 0 | 64 | 41
    10. -----------+---------+--------+----------+------+--------+-----------------
    11. 65 | de | 0 | 1 | 0 | 65 | 42
    12. -----------+---------+--------+----------+------+--------+-----------------
    13. 74 | de | 0 | 1 | 0 | 74 | 51
    14. -----------+---------+--------+----------+------+--------+-----------------
    15. 66 | de | 0 | 1 | 0 | 66 | 43
    16. -----------+---------+--------+----------+------+--------+-----------------
    17. 67 | de | 0 | 1 | 0 | 67 | 44
    18. -----------+---------+--------+----------+------+--------+-----------------
    19. 68 | de | 0 | 0 | 0 | 68 | 45
    20. -----------+---------+--------+----------+------+--------+-----------------
    21. 69 | de | 0 | 0 | 0 | 69 | 46
    22. -----------+---------+--------+----------+------+--------+-----------------
    23. 70 | de | 0 | 0 | 0 | 70 | 47
    24. -----------+---------+--------+----------+------+--------+-----------------
    25. 71 | de | 0 | 0 | 0 | 71 | 48
    26. -----------+---------+--------+----------+------+--------+-----------------
    27. 72 | de | 0 | 0 | 0 | 72 | 49
    28. -----------+---------+--------+----------+------+--------+-----------------
    29. 73 | de | 0 | 0 | 0 | 73 | 50
    Alles anzeigen


    MfG
    boyge

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von boyge ()

  • Hallo Fipsi,

    LIMIT 1 bringt mir ja nichts, denn ich will ja schon alle Elemente haben, aber entweder die mit Sprache 'en' oder wenn 'en' nicht verfügbar, dann mit 'de'. Denn diese Elemente gehören ja alle zur PID = 7.

    Vielleicht erkläre ich das nochmal was deutlicher.

    Ich habe ein Produkt mit der ID 7 (PID=7).

    Diesem Produkt sind bestimmte Merkmale zugeordnet (p_inkl_tid = InklID)

    Und diesen Merkmalen sind die Texte in verschiedenen Sprachen zugeordnet. (p_inkl_texte_tid)

    Und jetzt sollen, je nach Auswahl der Sprache (en) die Texte ausgegeben werden. Ist für ein Element (p_inkl_tid = InklID) die ausgewählte Sprache (en) nicht vorhanden, so soll dann und NUR dann die Standardsprache (de) ausgewählt werden.

    Ich hoffe ich habe das Verständlich ausgedrückt.

    MfG
    boyge
  • Moin!

    Puh, das scheint ein wenig komplexer zu sein.

    Versuch mal folgendes:

    Quellcode

    1. SELECT a.`VerfAb`,a.`Startanz`,a.`Bold`,b.`Text`
    2. FROM `p_inkl` AS a
    3. LEFT JOIN `p_inkl_texte` AS b
    4. ON b.inklid = a.tid
    5. and b.tid = IFNULL ( (
    6. SELECT c.tid FROM p_inkl_texte AS c WHERE c.inlkid = a.tid and c.sprache = 'en'
    7. ), (
    8. SELECT d.tid FROM p_inkl_texte AS d WHERE d.inlkid = a.tid and d.sprache = 'de'
    9. )
    10. )
    11. WHERE a.`PID` = '7' AND a.`Aktiv` = '1' ORDER BY a.`VerfAb` ASC ,a.`Anordnung` ASC
    Alles anzeigen


    Was ich mache ist folgendes: in der IFNULL Funktion wird zuerst geprüft, ob ein Datensatz mit der Sprache 'en' existiert. Falls dies nicht so ist (Query ergibt NULL) wird die andere TID mit der Sprache 'de' genommen. Damit solltest du eigentlich alles erwischen. Ich habe das bei mir lokal in einer ähnlichen Datenstruktur getestet.
    Sollte das so nicht ganz funzen, bitte ich die Fehler zu entschuldigen und zu korrigieren. :)

    Viel Erfolg und viele Grüße
    Bodo06