Announcement

Collapse
No announcement yet.

Bestimmte Daten nicht anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bestimmte Daten nicht anzeigen

    Hallo!

    Ich bin noch Anfänger und nach 6 Stunden googlen und suchen usw. dachte ich mir jetzt mal nachzufragen.
    Also ich habe eine Tabelle mit Kunden und eine mit Aufgaben die die Kunden erledigen sollten. Dann noch eine relationstabelle in der nur eingetragen wird bei welchem Kunden welche Aufgabe nicht mehr ausgegeben werden soll. Und da fängt das Problem an.
    Ich habe 34 Aufgaben. In der relationstabelle habe ich 2 Datensätze eines Kunden. Bei diesem Kunde sollten dann laut Abfrage dann nur noch 32 Aufgaben erscheinen. Es erscheinen mit Distinct 34 Aufgaben statt 32 und ohne komischerweise 66 statt 64 bzw. wenn es nicht funktioniert doch volle 68. Bei folgender Variante sind es 66 wobei die ausselektierten Datensätze (2 Stück) nicht mehr doppelt sondern nur einfach vorhanden sind. Deswegen 66 anstatt 64 die es ohne diese Datensätze seien sollten: (Ich hoffe ihr versteht was ich meine)

    Hier die Abfrage:
    select * from aufgaben, kundenstamm, kunde_aufgabe_ok where kundenstamm.id = '3' and kunde_aufgabe_ok.kunde_id = '3' and not (kunde_aufgabe_ok.kunde_id = kundenstamm.id and kunde_aufgabe_ok.aufgabe_id = aufgaben.id)

    Gruß,
    Arno

  • #2
    Hallo Arno,
    Originally posted by Arnooo View Post
    ...(Ich hoffe ihr versteht was ich meine)
    Also ich nicht!

    Originally posted by Arnooo View Post
    Hier die Abfrage:
    select * from aufgaben, kundenstamm, kunde_aufgabe_ok where kundenstamm.id = '3' and kunde_aufgabe_ok.kunde_id = '3' and not (kunde_aufgabe_ok.kunde_id = kundenstamm.id and kunde_aufgabe_ok.aufgabe_id = aufgaben.id)
    Damit kann ich dann was anfangen

    Ich denke mal du hast hier die Logik von Relationen nicht ganz verstanden.
    Zuerst möchtest du ja eine relationale Beziehung vom Kunden zu seinen Aufgaben - die fehlt in deinem Select völlig!
    Code:
    select * 
    from aufgaben auf, 
      kundenstamm knd
    where auf.kunde_id = knd.id
    So, und jetzt möchtest du nur die Aufgaben Anzeigen, die in kunde_aufgabe_ok NICHT enthalten sind. Dazu hast du zwei Möglichkeiten. Das eine ist ein Subselect und m.E. am verständlichsten. Subselects werden aber erst ab MySQL 4.1 unterstützt:
    Code:
    select * 
    from aufgaben auf, 
      kundenstamm knd
    where auf.kunde_id = knd.id
      and auf.id not in (
        select aufok.aufgabe_id
        from kunde_aufgabe_ok aufok
        where aufok.kunde_id = knd.id)
    Die zweite Variante ist ein Outer-Join mit zusätzlichem Ausschluß der Übereinstimmungen. Hier ist die Logik nicht ganz so schlüssig, aber es bringt dasselbe Ergebnis und ist u.U. die schnellere Variante:
    Code:
    select * 
    from aufgaben auf, 
      kundenstamm knd
    left outer join kunde_aufgabe_ok aufok on (
      aufok.kunde_id = knd.id
      and aufok.aufgabe_id = auf.id)
    where auf.kunde_id = knd.id
      and aufok.aufgabe_id is null
    Ich hoffe du verstehst was ich meine

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hey danke!

      Also ich tu mich da noch etwas schwer. Der Subselect funzt lokal bei mir da ich mysql > 5 habe. Internetserver leider nur 4.0. Also habe ich folgendes angepasstes verwendet und bekomme die Fehlermeldung "ERROR 1054: Unknown column 'aufgaben.id' in 'on clause'" bei folgender Abfrage:
      select * from aufgaben, kundenstamm
      left outer join kunde_aufgabe_ok on ( kunde_aufgabe_ok.kunde_id = kundenstamm.id and kunde_aufgabe_ok.aufgabe_id = aufgaben.id )
      where kunde_aufgabe_ok.kunde_id = kundenstamm.id and kunde_aufgabe_ok.aufgabe_id is null

      und nu? wo liegt der Fehler? irgendwie bin ich wohl zu blöd dazu???

      Comment


      • #4
        Laß mal die Klammer weg.
        BTW Select * bei einem Join ist nicht unbedingt ne gute Wahl. Wähle am Besten nur die benötigten Felder aus.

        Comment


        • #5
          klammer habe ich weggellassen und anstatt * ein Feld ausgewählt. Die Fehlermeldung bleibt gleich.

          Comment


          • #6
            Existiert den das Feld id in der Tabelle aufgaben?

            Comment

            Working...
            X