Logisches Problem ;)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Logisches Problem ;)

    Hallo,

    also ich habe 2 Tabellen. Eine mit Kontaktdaten (PK : Kundennummer, E-Mail, Name, Vorname...) und eine mit (FK: Kundennummer), Zustand und Datum.

    Kundennummer is klar. Bsp: 1000001
    Zustand: 0 und oder 1
    Datum auch klar. Bsp: 2005-05-05

    0 -> Testbetrieb
    1 -> Echtbetrieb

    In der 2. Tabelle können also keiner, einer oder zwei Einträge mit der Kundennummer sein. Denn Wenn der Zustand 0 abgeschlossen ist kann der Zustand 1 eingenommen werden. Es ist allerdings wichtig das der Zustand 0 erhalten bleibt.

    Wenn ich nun eine Abfrage auf die 2. Tabelle mache uns zwar auf den Zustand 0 bekomme ich alle Datensätze, da die Kunden die Zustand 1 inne haben Zustand 0 bereits durchlaufen haben und hierfür auch ein Datensatz besteht.

    Jemand ne Idee wie ich nur die Datensätze aus der 2. Tabelle ziehe die den Zustand 0 inne haben?

  • #2
    Also Bsp für die Abrage auf den Zustand 1:

    PHP-Code:
    $qr 'SELECT * FROM adressen, status  
    WHERE adressen.Kundennummer = status.Kundennummer 
    AND status.Phase=1 ORDER BY adressen.'
    .$sort.' ASC;'
    bei Zustand 0 bekomm ich halt das besagte problem das ich ebenfalls die Datensätze bekomme die den Zustand 0 bereits abgeschlossen haben.
    EDIT:
    line break sponsored by asp2php. Bitte demnächst selbst drauf achten. Danke.
    Zuletzt geändert von Ueps; 16.08.2005, 09:23.

    Kommentar


    • #3
      Bitte zuerst DAS und anschliessend deinen Freund besuchen, er hillft dir gern bei der Lösung

      Kommentar


      • #4
        Sorry,

        aber ich habe ein Knoten im Kopf.
        Egal was ich tue ich bekomme die Datensätze die bereits im Zustand 1 sind nicht raus gefilert.

        Habe im Netz nach Möglichkeiten für Subquerys gesucht, aber die scheinen sehr rare zu sein oder gut versteckt.

        Kommentar


        • #5
          wie sieht dein Versuch aus? Tipp: 2 x JOIN sollst du in deiner Abfrage einbauen. Wenn dein DBMS sub-select kann, wird's noch einfacher, Tipp dazu: NOT IN (SELECT...)

          Kommentar


          • #6
            PHP-Code:
            $qr SELECT (
            SELECT KundenNummer
            FROM status WHERE status 
            1
            ), adressen.KundenNummer
            FROM status 
            Adressen
            WHERE adressen
            .KundenNummer status.KundenNummer
            So zum einen Meldet MySQL das die Subquery mehr als einen Treffer hat und zum anderen weiss ich nicht wie ich auf die Ergbenisse ziele...
            das is doch alles mist...

            Wenn ich mit auf das Ergbeniss Zielen könnte und dann gegen Kundennummer = Null fahren könnte wäre das Problem gelöst.

            So jetzt schlägt es erstmal Mittag. Vielleicht kann ich ja meine Gedanken bei ner Currywurst ordenen und mir fällt die Lösung ein.

            Bis gleich...

            PS: Wozu 2 Joins? Den Hintergedanken habe ich noch nicht nachvollziehen können.

            Kommentar


            • #7
              Original geschrieben von Ueps

              PS: Wozu 2 Joins? Den Hintergedanken habe ich noch nicht nachvollziehen können.
              weil:

              - gib bitte alle Kundennummer, welche in Testphase sind (JOIN)
              - aber nur die, die noch in Testphase sind (JOIN, Tipp hier kommt die Überprüfung mit Echtbetrieb in Spiel)

              Dein Sub-Select ist Mist. Was willst du damit? Tipp: so könnte der Sub-Select aussehen:

              select .... where .... not in (select ...)

              Kommentar


              • #8
                das is doch alles mist...
                Solche Erfahrungen lassen oft darauf schließen, dass das Tabellendesign ungünstig ist. Ich habe noch immer nicht verstanden, was du eigentlich machen willst, und das ist immer eine schlechte Voraussetzung für eine einfache Lösung.

                Was willst du mit den Tabellen erreichen? Kunden, die im Testbetrieb laufen? soweit ok.

                Der gleiche Kunde der im Echtbetrieb laufen soll? ebenfalls ok.

                Der gleiche Kunde, der sowohl im Testbetrieb als auch im Echtbetrieb läuft? Warum das? Und wie hängt das mit der Abfrage zusammen, die du erreichen willst?

                Mit dem Tabellendesign kannst du prima erfahren:

                Alle Kunden, die im Testbetrieb laufen.
                Alle Kunden, die im Echtbetrieb laufen.

                Also wo liegt eigentlich das Problem?

                Gruß Marian
                Online-Kurse die jeder versteht: HTML, PHP, MySQL, Word, Excel
                http://www.lernpilot.de/wbt/

                Kommentar


                • #9
                  Original geschrieben von heddesheimer

                  Der gleiche Kunde, der sowohl im Testbetrieb als auch im Echtbetrieb läuft? Warum das? Und wie hängt das mit der Abfrage zusammen, die du erreichen willst?
                  ich habe so verstanden, dass alle Kunden erstmal durch den Testbetrieb müssen, danach werden sie in dem Echtbetrieb übernommen. Nun er will wissen, wer zur Zeit noch in Testbetrieb sind.

                  Wenn er nach 0 fragt, bekommt er alle Kunden, daher muss er nochmals die, die 1 besitzen, filtern, und weil es Extraeinträge und keine zusätzliche Spalteneinträge sind, muss join/sub-select her

                  Kommentar


                  • #10
                    Original geschrieben von asp2php
                    [B]ich habe so verstanden, dass alle Kunden erstmal durch den Testbetrieb müssen, danach werden sie in dem Echtbetrieb übernommen. Nun er will wissen, wer zur Zeit noch in Testbetrieb sind.
                    und warum ändert er dann nicht einfach die 0 in eine 1, statt immer gleich zwei Datensätze für solche Kunden anzulegen?

                    Gruß Marian
                    Online-Kurse die jeder versteht: HTML, PHP, MySQL, Word, Excel
                    http://www.lernpilot.de/wbt/

                    Kommentar


                    • #11
                      @Ueps:
                      Wenn asp2php das richtig erklärt hat, könnte ich leicht eine Lösung finden. Ich bräuchte dazu mal einen Dump mit den CREATE-Anweisungen der beiden Tabellen und einige INSERTs mit Beispieldaten. Dann poste ich hier mal eine funktionierende Abfrage.

                      Sorry wegen doppeltem Posting, aber Löschen ging leider nciht

                      Gruß Marian
                      Online-Kurse die jeder versteht: HTML, PHP, MySQL, Word, Excel
                      http://www.lernpilot.de/wbt/

                      Kommentar


                      • #12
                        Erst 0, dann 0 und 1, dann 0 und 1 und 2, dann... ?

                        Zähle doch und selektiere nur die, die genau einmal vorkommen
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Original geschrieben von heddesheimer
                          und warum ändert er dann nicht einfach die 0 in eine 1, statt immer gleich zwei Datensätze für solche Kunden anzulegen?

                          Gruß Marian
                          weil er wahrscheinlich das Datum von Testphase braucht . Andererseits man könnte die Tabellen Struktur auch so ändern, dass man 2 Spalten vom Typ DATETIME hat, welche Test- und Echtbetriebsdatum aufnehmen, dann ist es viel einfacher aber wie immer, warum einfach, wenn's kompliziert geht

                          Kommentar


                          • #14
                            Alternativ könntst du auch (ich höre die Normalisierungsfetischisten schon schreien) die zweite Tabelle nur als eine Art Historie nutzen und den aktuellen Status des Kunden direkt in die erste Tabelle schreiben

                            Nachteile: Bei einer Statusänderung müssen zweiTabellen gepflegt werden

                            Vorteile: Alle Abfragen, die den Status lesen, werden einfacher und schneller
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Original geschrieben von asp2php
                              Andererseits man könnte die Tabellen Struktur auch so ändern, dass man 2 Spalten vom Typ DATETIME hat, welche Test- und Echtbetriebsdatum aufnehmen, dann ist es viel einfacher aber wie immer, warum einfach, wenn's kompliziert geht
                              Ach du schei.... Vorschlag angenommen. =)

                              Danke. Obwohl ich das mit dem join + Sub Select im Hinterkopf behalte und es bei zeit mal ausprobieren werden.

                              Kommentar

                              Lädt...
                              X