tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
232
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kenguruh2002 kenguruh2002 ist gerade online Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    21
    Hallo,

    hier mal mein Problem....

    Tabelle Mitglieder (fw_mem_daten) (pid => PRIMARY, AUTO_INCREMENT)

    Code :
    1
    2
    3
    4
    
    pid | vorname | nachname | abteilung
     1  | th....  | fir..... |     1
     2  | al....  | sch..... |     2
     3  | pf....  | do...... |     1


    Tabelle Dienstplan (fw_dienst_plan) (id => PRIMARY, AUTO_INCREMENT)

    Code :
    1
    2
    3
    
    id | abteilung | beginndatum          | enddatum
     1 |     1     | 2011-01-01 08:00:00  | 2011-01-01 16:00:00
     2 |     1     | 2011-01-02 08:00:00  | 2011-01-02 16:00:00


    Tabelle Dienstteilnahme (fw_dienst_teilnahme) (id = id von fw_dienst_plan, pid = pid von fw_mem_daten)

    Code :
    1
    2
    3
    4
    5
    6
    
    id | pid | teilnahme
     1 |  1  | anwesend
     1 |  2  | anwesend
     1 |  3  | entschuldigt
     2 |  1  | anwesend
     2 |  3  | anwesend


    Wie man hierraus hoffentlich ersehen kann, war die PID 2 zum Zeitpunk des Dienstes von ID 1 noch in der ABTEILUNG 1. Irgendwann danach muss dieser dann die Abteilung gewechselt haben.

    Was möchte ich jetzt eigentlich haben?

    Es sollen erstmal alle PIDs angezeigt werden die (noch) in ABTEILUNG 1 sind. Desweiteren sollen auch die PIDs angezeigt werden, die in der Dienstteilnahme drinstehen, egal in welcher Abteilung sie sich jetzt befinden.
    Es sollen auch nicht alle Dienstteilnahmen ausgegeben werden sondern nur die übermittelt werden. Zum Bsp. wären das jetzt nur die ID 1 und 2


    PHP-Code:
    SELECT md.pidCONCATmd.nachname', 'md.vorname ) AS mitglieddt.id
    FROM fw_mem_daten 
    AS md
    LEFT JOIN fw_dienst_teilnahme 
    AS dt ON md.pid dt.pid
    AND (
    dt.id
    IN 
    1)
    )
    ORDER BY mitglied 
    Gibt mir alle Mitglieder aus. bei der ID wird mit NULL aufgefüllt, wenn kein Eintrag gefunden wurde. Also erstmal alles richtig.
    Wie bekomme ich jetzt noch die Einschränkung hin, dass er mir wo die ID NULL ist, nur Mitglieder der Abteilung 1 ausgegeben werden?

    geht das überhaubt mit joins?
     
    --------------------------------
    Have Phune Kenguruh2002

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    item: dt.id IN ( 1, 2 ) gehört in ein WHERE-Teil und nicht in den JOIN-Teil

    item: die Einschränkung der dt.id würde ich in ein Subquery schreiben. Es erleichtert nachher die verschiedenen Bedinungen auszubändeln

    item: Der WHERE-Teil muss nun berücksichtigen: Alle mit id NULL und Abteilung 1, sowie alle die eine ID haben. Das gibt eine AND-Verknüpfung für den ersten Teil und dann noch beide Teile mit einem OR zusammenhängen

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    SELECT 
        md.pid, 
        CONCAT( md.nachname, ', ', md.vorname ) AS mitglied, 
        dt.id
    FROM 
        fw_mem_daten AS md
        LEFT JOIN (
                SELECT id
                FROM fw_dienst_teilnahme
                WHERE id IN (1,2)
            ) AS dt 
            ON md.pid = dt.pid
    WHERE
        (
            dt.id IS NULL 
            AND md.abteilung = 1
        ) OR (
                NOT dt.IS IS NULL
        )
    ORDER BY
        mitglied
    kenguruh2002 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    kenguruh2002 kenguruh2002 ist gerade online Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    21
    Besten Dank
     
    --------------------------------
    Have Phune Kenguruh2002

Ähnliche Themen

  1. MYSQL - Sortieren mit Joins
    Von switchkill im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 14.03.09, 15:36
  2. mySQL und Joins
    Von notebook20000 im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 13.07.07, 10:39
  3. MySQL: Wie funktionieren JOINs?
    Von Karbrüggen im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 16.03.07, 19:00
  4. MySQL und Joins
    Von mathiu im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 13.10.04, 08:35
  5. Problem mit JOINs (mySQL)
    Von laZee im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 10.06.04, 15:57

Stichworte