SQL Join und Selectboxen?

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

  • SQL Join und Selectboxen?

    jo tach,

    ich habe ein Immobilienportal entwickelt wo Immobilienobjekte einen oder meheren Kunden zugeordnet werden.

    Dazu gibt es 3 Tabellen:

    - fa_pass_data - enthält die Kundenstammdaten inkl. Kundennummer
    - Objekte - enhält objektspezifische Daten

    Wenn ein Objekt einen oder meheren Kunden zugewiesen wird, wird dies in der Tabelle

    - Mieter -

    abgepspeichert mit der Objektnummer und der Kundenummer. Also z.B.

    Objekt001 | K005
    Objekt001 | K004
    Objekt002 | K005
    Objekt003 | K007


    soweit funktioniert alles super. nur wenn ich die Objektdaten und die Zuordnung ändern möchte, gibt es ein problem bei der Anzeige der Objektzuordnungen. Die Zuordnungen zum Objekt werden in einer selectbox angezeigt:

    PHP-Code:
                       //Datenbankanbindung zu Tabelle "Kundennummer" mit Variabeln 
                
    $verbindung mysql_connect
    ($conf_pass->db_host,$conf_pass->db_user,$conf_pass->db_pass);  
                
    mysql_select_db($conf_pass->db_name,$verbindung);  

                
    //Alle Kundennummern anzeigen, bereits zugeordnete sind markiert
                
    print "<select name=Mieter_array[] size=8 multiple>"

                
    //Vergleiche Kundennummern von 2 Tabellen, wenn schon vorhanden, dann selected
                
    $befehl2 "SELECT c.Kundennummer cnr, IF(ObjektnummerM = '$ObjektnummerO'
     AND NOT ISNULL(d.KundennummerM), ' selected=\"selected\"', '') 
    dnr FROM fa_pass0_data c  
                LEFT JOIN Mieter d ON c.Kundennummer=d.KundennummerM"
     
    or die (mysql_error());  

                
    //Befehl1 ausführen
                
    $objekte2 mysql_query($befehl2,$verbindung) or die (mysql_error());    

                
    //Jede Zeile ausgeben
                
    while ($eingabe2=mysql_fetch_assoc($objekte2))   

                                    {
                                    
    // Wenn diese Objektnummer aus Tabelle "Objekte"
                    //mit Objektnummer in Tabelle "Mieter" übereinstimmt..
                                     
    printf("<option%s>%s</option>"$eingabe2['dnr'], $eingabe2['cnr']);

                                    }  

                print 
    "</select>"
                
    mysql_close(); 

    wie gesagt, die gesamten Kundennummern die in der selectbox angezeigt werden, kommen aus der Tabelle "fa_pass0_data". alle die Kunden die in der Tabelle "Mieter" ebenfalls eingetragen sind, d.h. denen bereits ein objekt zugewiesen wurde, sollen in der selectbox MARKIERT sein!!

    Nun das Problem. In dem Test von mir sind einem Objekt meheren Kunden zugeordnet worden.

    Datenbank Tabelle - Mieter - (mysqladmin):


    In der selectbox erscheinen 1. die Kundenummern korrekt markiert, denen das Objekt zugewiesen wurde, ABER 2. bei denen wo die Kundennummern doppelt drin stehen, werden sie in der selectbox auch doppelt angezeigt.

    Anzeige der selectbox für Objektnummer K004:


    Ich weiss nicht wo der Fehler liegt. Ich vermute nur mal in der SELECT, bzw. JOIN ABFRAGE.
    Zuletzt geändert von c-bass; 10.08.2005, 16:17.
    http://www.4webworking.de
    Das Resourcenarchiv für Webworker

  • #2
    also um das noch einmal verständlicher darzustellen.

    es sollen alle Kundennummern aus der Tabelle "fa_pass0_data" angezeigt werden. die Kundenummern die dem Objekt zugewiesen wurden, sollen markiert sein. DAS FUNKTIONIERT!

    ABER die Abfrage stimmt nicht, denn er zeigt zusätzlich noch alle anderen Kundennummern aus der Tabelle "Mieter" an, die zwar einem Objekt zugeordnet wurden, aber nicht diesem Objekt.
    http://www.4webworking.de
    Das Resourcenarchiv für Webworker

    Kommentar


    • #3
      $befehl2 = "SELECT c.Kundennummer cnr, IF(ObjektnummerM = '$ObjektnummerO'
      AND NOT ISNULL(d.KundennummerM), ' selected=\"selected\"', '')
      dnr FROM fa_pass0_data c
      [COLOR=blue]inner[/COLOR] JOIN Mieter d ON c.Kundennummer=d.KundennummerM"
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar

      Lädt...
      X