susi: mysql: wo kann ich IF einsetzen?

hallo,

ich hab folgende aufgabenstellung ich hab eine tabelle mit zwei spalten die eine 1:n beziehung beinhalten könnte oder auch nicht!

nun würd ich gern ein select haben das checkt ist die erste 1:n-beziehung gesetzt, dann join mit jenem table und hol die daten!
ist die erste 1:n verbindung nicht gesetzt join mit dem anderen table!

im moment hab ich eben left joins mit den beiden tablen der beiden 1:n beziehungen!
die logik ob die eine oder die andere gesetzt ist mach ich nun im skriopt danach ...

kann ich diese bedingung auch schon in MYSQL abhandeln?

[CODE]
SELECT g.id AS 'game_id', e.uid AS 'event_id', a.uid AS 'article_id'
FROM game g
LEFT JOIN event e ON g.event = e.id
LEFT JOIN article a ON g.article = a.id
WHERE g.id = '1'
[CODE]
es kann jedoch nur der eine oder der andere gesetzt sein!
also ...
wenn kein event dann ist ein artikel gesetzt und vice versa ...

ich würde eben diese unterscheidung gerne in MYSQL machen ...

SELECT g.* FROM game g IF(g.event=0 OR g.event='') JOIN MIT 'event'-table ELSE JOIN MIT 'article'-table

geht dies irgendwie oder ist die derzeitige variante eh die einzig mögliche?

lg, susi

  1. SELECT g.* FROM game g IF(g.event=0 OR g.event='') JOIN MIT 'event'-table ELSE JOIN MIT 'article'-table

    geht dies irgendwie oder ist die derzeitige variante eh die einzig mögliche?

    warum versuchst di diese IF bedingung nicht als WHERE zu formulieren (WHERE g.event=0 OR g.event='')

    bei dieser bedingung fängst du übrigens NULL nicht ab

  2. Hallo Susi,

    [CODE]
    SELECT g.id AS 'game_id', e.uid AS 'event_id', a.uid AS 'article_id'
    FROM game g
    LEFT JOIN event e ON g.event = e.id
    LEFT JOIN article a ON g.article = a.id
    WHERE g.id = '1'
    [CODE]
    es kann jedoch nur der eine oder der andere gesetzt sein!
    also ...
    wenn kein event dann ist ein artikel gesetzt und vice versa ...

    Du möchtest also _keinen_ LEFT JOIN verwenden, sondern einen INNER JOIN und zusätzlich die Ergebnisse zweier Abfragen miteinander vereinigen. Dazu kannst Du seit MySQL 4.0 UNION nutzen.

    SELECT g.* FROM game g IF(g.event=0 OR g.event='') JOIN MIT 'event'-table ELSE JOIN MIT 'article'-table

    IF in MySQL-SQL ist nicht mit der bedingten Ausführung in prozeduralen Programmiersprachen gleichzusetzen - es arbeitet anders.

    Freundliche Grüße

    Vinzenz