SELECT im JOIN / Eltern und ihre Kinder

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

  • SELECT im JOIN / Eltern und ihre Kinder

    hiho,

    ich möchte eine Liste von Eltern (parents) anzeigen, unter den jeweiligen Eltern möchte ich die Namen der jeweiligen Kinder (users) anzeigen. In beiden Tables ist die parent_id

    Klappt nicht richtig, so hab ich es bis jetzt:

    PHP-Code:

        SELECT 
            p
    .parent_id,
                
    p.parent_firstname,
            
    p.parent_lastname,
            
    p.parent_insert_date,
            
    u.user_id,
            
    u.user_name
            
        FROM
            
    ".$pre."_parents p
            
           
    // hier ist der Wurm drin:
        
    LEFT JOIN (
        
            
    SELECT *
            
    FROM ".$pre."_users
        
        
    u USING(parent_id)
        
            
    LEFT JOIN ".$pre."_users ON u.parent_id p.parent_id
        
        WHERE 
            p
    .parent_lastname != ''

        
    ORDER BY 
            p
    .parent_lastnamep.parent_firstname ASC 
    Wie krieg ich es hin, dass die Kinder in einem Array im jeweiligen Parent Array landen.

    cheers, _mil
    Zuletzt geändert von _mil28; 11.04.2008, 14:44.

  • #2
    "Eltern-Kinder" das schreit förmlich nach Nested Sets. Was besseres um solche hierarchischen Strukturen abzubilden kenne ich nicht... Dann ist auch das Auslesen stink-einfach
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Hilft jetzt nicht wirklich, hab keinen Einfluß auf die DB-Struktur ...

      Kommentar


      • #4
        Das musst du PHP-Seitig zuordnen. Das Auslesen sieht so schon ganz gut aus!

        Kommentar


        • #5
          So krieg ich für jedes Kind ein volles Array:

          Klaus Meyer
          Kind 1

          Klaus Meyer
          Kind 2

          Susi Strolch
          Kind 3

          Wie krieg ich den jetzt die beiden Meyers zusammengelegt, so dass die Kinder als key 0 und 1 erhalten bleiben ?

          Kommentar


          • #6
            neues array erstellen, alle anderen durchlaufen, eltern als key nehmen und die kinder als values.

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Unabhängig von deinem Problem:
              Warum machst du zwei LEFT JOINS auf die gleiche Tabelle über die gleichen Keys?
              Code:
              LEFT JOIN (
                  
                      SELECT *
                      FROM ".$pre."_users
                  
                  ) u USING(parent_id)
              ist ja (fast) identisch mit
              Code:
              LEFT JOIN ".$pre."_users ON u.parent_id = p.parent_id
              Gruss
              H2O

              Kommentar


              • #8
                Hab ich schon korrigiert:

                PHP-Code:

                    $query_rsSelectParentsAndUsers 
                "
                    
                    SELECT 
                        p.parent_id,
                        p.parent_firstname,
                        p.parent_lastname,
                        p.parent_insert_date,
                        u.user_id,
                        u.user_name
                        
                    FROM
                        "
                .$pre."_parents p
                        
                    LEFT JOIN (
                    
                        SELECT *
                        FROM "
                .$pre."_users
                    
                    ) u USING(parent_id)
                    
                    WHERE 
                        p.parent_lastname != ''

                    ORDER BY 
                        p.parent_lastname, p.parent_firstname ASC

                    "

                Im PHP bau ich mir dann mein Result Array zusammen:

                PHP-Code:

                        $i 
                0;
                    
                        
                $old_parent_id null;
                    
                        do { 
                        
                            if (
                $row_rsSelectParentsAndUsers['parent_id'] != $old_parent_id){
                                
                                
                // new parent array key
                                
                $result[$i]['parent_id']            = $row_rsSelectParentsAndUsers['parent_id'];
                                
                $result[$i]['parent_firstname']        = $row_rsSelectParentsAndUsers['parent_firstname'];
                                
                $result[$i]['parent_lastname']        = $row_rsSelectParentsAndUsers['parent_lastname'];
                                
                $result[$i]['parent_insert_date']    = $row_rsSelectParentsAndUsers['parent_insert_date'];
                                
                                
                // new kid array
                                
                $j 0;
                                
                $result[$i]['kids']                    = array();    
                                
                                
                // save old parent id
                                
                $old_parent_id                        $row_rsSelectParentsAndUsers['parent_id'];
                                
                                
                // count parents
                                
                $i++;
                                
                            }
                        
                            
                // save kid info
                            
                $result[$i-1]['kids'][$j]['user_id']     = $row_rsSelectParentsAndUsers['user_id'];
                            
                $result[$i-1]['kids'][$j]['user_name']     = $row_rsSelectParentsAndUsers['user_name'];        
                        
                            
                // count kids
                            
                $j++;        
                        
                        } while (
                $row_rsSelectParentsAndUsers mysql_fetch_assoc($rsSelectParentsAndUsers)); 
                Funktioniert, wirkt aber nicht sonderlich elegant, für Verbesserungsvorschläge bin ich jederzeit dankbar.

                Kommentar

                Lädt...
                X