Abfrageproblem

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

  • Abfrageproblem

    Hallo, ich sitze schon seit Stunden an einem Problem. Verstehe das auch nicht.

    Ich habe 3 Tabellen: Kunde, Partner und Kontakte

    In der Kontakttabelle stehen die ID´s zu den Kunden und Partnern und ein Flag ob es ein Kunde oder ein Partner ist (da sonst die ID´s doppelt vorkommen)


    Ausgeben soll er mir alle Kunden und alle Partner die in der Kontakttabelle stehen.

    *************
    SELECT name, nname, vname, date, time, personType
    FROM contact, kunde, ansprechpartner
    WHERE (contact.personID=kunde.id AND contact.personType='C')
    OR (contact.personID=ansprechpartner.id AND contact.personType='P')
    *************

    Was er ausgibt sind aber alle Partner (korrekt) und irgendwie willkührlich Kunden (so scheint es mir zumindest), d.h die Kunden tauchen dann auch doppelt auf und so


    Vielen Dank im Voraus schonmal :-/

  • #2
    deine tabellen sind ja schon müll.
    schon alleine die vorstellung mit der doppelten id.
    kunden- und partnerdaten sind doch eh beide gleich.
    sie unterscheiden sich nur durch ein flag bei dir.

    hier mal mein vorschlag.

    Code:
    tabelle typeb
    - TypId INT autoinc
    - TypName VARCHAR oder ENUM(kunde|partnet)
    
    tabelle adressen
    - AdrId INT autoinc
    - TypId INT (gleicher typ wie bei tabelle typen)
    - AdrName VARCHAR
    - AdrStrasse VARCHAR
    - usw
    
    tabelle kontakte
    - KonId INT autoinc
    - AdrId INT (typ wie oben)
    - KonText TEXT
    - KonData DATETIME
    - usw.

    mit dieser abfrage kannst du das auslesen.
    Code:
    SELECT      *
    FROM        kontakte K
                    LEFT JOIN adressen A USING(AdrId)
                        LEFT JOIN typen T USING(TypId)
    oder nur kontakte an kunden
    Code:
    SELECT      *
    FROM        kontakte K
                    LEFT JOIN adressen A USING(AdrId)
                        LEFT JOIN typen T USING(TypId)
    WHERE       T.TypName = 'kunde'

    oder nur kontakte an partner
    Code:
    SELECT      *
    FROM        kontakte K
                    LEFT JOIN adressen A USING(AdrId)
                        LEFT JOIN typen T USING(TypId)
    WHERE       T.TypName = 'partner'
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Mit den tabellen das ist das Problem. ist für ne Diplomarbeit sollte also schon vernünftig sein.

      Nur ganz gleich sind die Tabellen nicht.


      Abgesehen davon dass Kunden/Firmen noch ein paar mehr Daten haben wie ihre Ansprechpartner, haben sie nur einen Namen/Bezeichnung, Ansprechpartner jedoch Vor und Nachname. Gekennzeichnet werden muss dann auch noch ob es sich um eine Firma oder um einen Ansprechpartner handelt.

      Würdest du das trotzdem in eine Tabelle packen ?
      Der größte Teil ist natürlich gleich wie Adresse, Telefon etc.


      Oder sollte man aufgrund der Größe die Tabellen eh lieber teilen ?

      Das Problem bei mir oben bin ich erstmal umgangen indem ich in der Kontakttabelle "GROUB BY id-der-kontakttabelle" genommen habe.

      Scheint erstmal zu klappen

      Kommentar


      • #4
        wenn du deine tabellen nicht ordentlich strukturierst wird das eh nicht werden.

        grundsätzlich gilt. alles was von der struktur gleich ist, gehört in die gleiche tabelle.

        wenn du nun noch zusätzlich ansprechpartner hast, dann lege diese in einer tabelle 'ansprechpartner' ab. um die daten mit den adressen zu verbinden machst du einen entsprechende verbindungstabelle.


        und noch eins am rande.... ich wollte nicht dein datenbankdesign übernehmen. das musst du schon selber machen.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Na so war es doch. 2 Tabellen. Eine Kunden und eine mit Ansprechpartnern.


          ABer da die Struktur nahezu gleich ist lege ich sie wohl doch zusammen und füge ne zusätzliche Spalte ein wo bei jedem Ansprechpartner ein Verweis auf den Kunden ist. kann ich ja amchen auch wenn es die gleiche Tabelle ist

          Kommentar


          • #6
            partner != ansprechpartner. denn ein partner kann ein geschäftspartner sein, wovon ich ausgegangen bin, und nicht ein ansprechpartner einer firma, mit der du zusammenarbeitest.

            da gab es wohl ein missverständnis. oder?


            bei den ansprechpartnern kommen nur name, mail und fon rein. die adresse hast du schon in 'adressen' stehen.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Ja sorry dann hab ich das falsch benannt.

              Adressen sollen die eigentlich separat haben. Vielleicht sollte ich das noch mal mit dem Auftraggeber absprechen

              Kommentar


              • #8
                ich denke, das ist eine diplomarbeit? wer bitte ist dann ein auftraggeber?
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Ne 2 Mannfirma ist der Auftraggeber. Betreut wird sie von nem Professor der aber keine Ahnung von Datenbanken hat.


                  Aber ne Extratabelle wäre dann wahrscheinlich doch besser :-D

                  Kommentar


                  • #10
                    ich würde alles trennen, was geht, um die db übersichtlich und flexibel zu halten.

                    auch solltest du dir überlegen wie die tabellen in abhängigkeit stehen müssen.

                    also ansprechparnter sind von adressen abhängig usq.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar

                    Lädt...
                    X