Anzeige:
Ergebnis 1 bis 15 von 15

Thema: Problem mit join

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.12.2004
    Beiträge
    5

    Problem mit join

    Hallo erstmal

    Ich bin zur zeit an einer kleinen Adressverwaltung und bin auf ein problem gestossen. Ich habe eine Tabelle mit Personen (tblAddress), eine Tabbelle mit Gruppen (tblGroup) und eine Link Tabelle (tblAddress_Group_Link) die das ganze verbindet. Heraus zufinden wer in welcher Gruppe ist, ist kein problem. Nur wer in 2 oder mehr Gruppen ist,da scheitere ich.
    Ich hoffe ihr könnt mir bei dieser sache helfen.

    hier noch die query mit der ich personen in einer gruppe suchen kann.
    Code:
    SELECT * FROM tbladdress LEFT JOIN tblAddress_Group_Link ON tblAddress.AddressId=tblAddress_Group_Link.AddressId WHERE GroupId=1

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo the4thele,

    was genau suchst du?

    Wenn du alle Adressen mit zugehörigen Gruppen haben willst würde ich 2 Statements machen. 1. Abfrage der Adressen und mit dem Ergebnis dann pro Adresse die Gruppe(n) auslesen.

    Hoffe ich hab das Problem richtig verstanden...

    see ya

    nEox

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.12.2004
    Beiträge
    5
    Das ist nicht ganz das was ich suche. Die Query ist für die Suchmaske. Sprich: der Benutzer gibt 2 oder mehr (mit einer gehts schon) Gruppen an und das program muss alle Addresen suchen die allen angegebenen Gruppen zugewiesen sind.


    p.s.
    so funktioniert es nicht....

    SELECT * FROM tbladdress LEFT JOIN tblAddress_Group_Link ON tblAddress.AddressId=tblAddress_Group_Link.Address Id WHERE GroupId=1 AND GroupId=1

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hi the4thele,

    Mach doch mit OR statt AND, wenns mit einer funktioniert.

    Also:

    PHP-Code:
    SELECT 
        

    FROM 
        tbladdress 
    LEFT JOIN 
        tblAddress_Group_Link 
    ON     
        tblAddress
    .AddressId tblAddress_Group_Link.Address Id 

    WHERE 
        GroupId
    =OR
        
    GroupId=

  5. #5
    Registrierter Benutzer
    Registriert seit
    27.12.2004
    Beiträge
    5
    das problem ist das ich dann alle addresen habe die in irgendeiner aufgeführt gruppe sind, ich will aber nur die die in beiden sind.

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    klannst du beispielinhalte deiner 2 tabellen liefern? dann kann man sich vielleicht leichter vorstellen

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hi,

    hasts mal so probiert?

    PHP-Code:
    SELECT
        
    *
    FROM
        tbladdress
    LEFT JOIN
        tblAddress_Group_Link
    ON     
        tblAddress
    .AddressId tblAddress_Group_Link.Address Id

    WHERE
        tblAddress_Group_Link
    .GroupId=OR
        
    tblAddress_Group_Link.GroupId=
    see ya

    nEox

  8. #8
    Registrierter Benutzer
    Registriert seit
    27.12.2004
    Beiträge
    5
    ja, hab ich ausprobiert. nur eben kommen hier alle die in der gruppe 1 oder in der gruppe 2 sind. Ich brauche eine query die mir nur datensätze zurück gibt die in beiden gruppen sind.

  9. #9
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    öm, kannst du evtl. kurz nen MySQL-Dump posten/schicken? Ich hätte evtl. die Lösung aber bevor ich dir jetzt schon wieder was falsches sage will ichs lieber vorher testen.

    see ya

    nEox

  10. #10
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Na dann will ich mich auch einmal versuchen:

    Du kannst die tblAddress_Group_Link auch mit sich selbst Joinen.
    Code:
    Select * 
    tblAddress_Group_Link L1 LEFT JOIN tblAddress_Group_Link L2 ON (
       L1.AddressId=L2.AddressId 
       AND L1.GroupId=1
       AND L2.GroupID=2)
    Damit dürftest du genau die Links rausgeschmissen bekommen, welche in beiden Gruppen vorhanden sind.

    Andere Alternative: Benutze die Having Clause.
    Code:
     SELECT
        ...........,
        COUNT(*)
    FROM
        tbladdress
    LEFT JOIN
        tblAddress_Group_Link
    ON     
        tblAddress.AddressId = tblAddress_Group_Link.Address Id
    
    WHERE
        tblAddress_Group_Link.GroupId=1 OR
        tblAddress_Group_Link.GroupId=2
    GROUP BY .................
    HAVING COUNT(*) > 1
    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  11. #11
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    hi

    Tabellen mit sich selbst joinen, die Ergebnisse per having prüfen - und wieder was dazugelernt

    see ya

    nEox

  12. #12
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    hat nur den nachteil, dass man nicht variabel viele möglichkeiten hat.. (zumindest nicht ohne programmiertechnischen aufwand den select dynamisch zu erzeugen)
    oder kennt da jemand eine lösung? (also gleiches problem, nur mit variabel vielen eigenschaften)

    greetz

  13. #13
    Registrierter Benutzer
    Registriert seit
    27.12.2004
    Beiträge
    5
    danke euch allen! jetzt hat es geklappt!

  14. #14
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    hi quinte17,

    eine Möglichkeit wäre über ein enum-Feld. Dann kann man auch die Group_Link Tabelle wegfallen lassen. Mysql Enum()
    Nachteil hier ist das man bei einer neuen Gruppe auch das Enum-Feld erweitern muss. Im laufenden Betrieb sollte man das dann eigentlich nicht mehr machen. Aber wenn sich die Gruppen nicht mehr ändern ist eigentlich eine ganz gute Lösung.

    see ya

    nEox
    Geändert von nEox (28-12-2004 um 11:37 Uhr)

  15. #15
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Zitat Zitat von quinte17
    hat nur den nachteil, dass man nicht variabel viele möglichkeiten hat.. (zumindest nicht ohne programmiertechnischen aufwand den select dynamisch zu erzeugen)
    oder kennt da jemand eine lösung? (also gleiches problem, nur mit variabel vielen eigenschaften)

    greetz
    Ich weiß nicht, was du mit dynamisch erzeugen meinst. Kannst du mal ein Beispiel bringen?

    Vielleicht hilft dir aber auch STORED PROCEDURE weiter
    (DOKUMENTATION HIER)Eigentlich nichts weiter als eine interne SELECT Abfrage, die sich aber für die User als Tabelle darstellt und auf die man dann wieder mit SELECT Statments zugreifen kann. Ich weiß aber nicht, ab welcher MySQL Version das geht.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •