Abfrage von 6 Tabellen, dabei ersetzten von ID's durch Namen

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

  • Abfrage von 6 Tabellen, dabei ersetzten von ID's durch Namen

    Hallo Leute,
    wieder ein Problem mit meiner Bilder Sammlung.
    Meine Inserts funktionieren, nur bekomme ich leider die gewünschten Infos nicht wieder per Select angezeigt.
    Ich verkürze mal die Tabellen Struktur aufs wesentliche, ich bräuchte nur mal das Prinzip wie ich es anstellen muss:

    competition(com_id|pic_link|style_id|style_id1|style_id2)
    style(style_id|stylenum|stylename)

    Mit diesem Select schaffe ich es aber nur die competition.style_id=style.style_id zu setzten und dann den Namen zuzuordnen
    PHP-Code:
    $style $mysqli->query("
            SELECT 
            com_id, pic_link, stylename
            FROM 
            competition, style
            WHERE 
            competition.style_id = style.style_id "
    );
                     {
        
        while(
    $daten $style->fetch_array()) 
        
        {
            echo 
              
    "<table><tr>
              <td>"  
    .  ($daten['com_id']) ."</td>"
              
    "<td>"  .  ($daten['pic_link']) ."</td>"
            
    "<td>"  htmlspecialchars ($daten['style_id']) 
            . 
    "<td>"  htmlspecialchars ($daten['stylename']) 
            . 
    "</td></tr>";
            }
           
    $style->close();
         echo 
    "</table>";
      } 
    Das Ergebinis ist:
    HTML-Code:
    35	../vollbild/2406-07-Mikki.jpg		singlet dress
    36	../vollbild/2406-02-Mikki.jpg		lighthouse skirt
    43	../vollbild/2406-05-Mikki.jpg		cocktail dress
    44	../vollbild/2406-11-Mikki.jpg		cocktail dress
    45	../vollbild/2406-06-Mikki.jpg		cocktail dress
    46	../vollbild/2406-14-Mikki.jpg		lighthouse skirt
    37	../vollbild/2406-03-Mikki.jpg		lighthouse skirt
    40	../vollbild/2406-04-Mikki.jpg		tri top
    Grundsätzllich muss ich dazu sagen, der Zentrale Punkt das Bild ist. An dieses Bild will ich die Informationen hängen. Aber halt auch mehrfache Informationen aus der gleichen Tabelle.

    Wenn also auf einem Bild zum Beispiel, ein Cocktail Dress und eine Jacke zu sehen sind, beide vom Stoff her aus Leopard gemacht worden sind, gehören sie zum gleichen Style. Also bräuchte ich eine Ausgabe die dies auswerfen würde:
    HTML-Code:
    45	../vollbild/2406-06-Mikki.jpg		cocktail dress     jacke
    Meine Idee wäre, die Styles aus der Tabelle Styles in ein Array abzulegen und dann bei der Ausgabe die ID durch den Namen zu ersetzten lassen.

    ABER wie???

    Hoffe ihr könnt mir helfen.

  • #2
    Ich glaub, du solltest a) deine Datenbank normalisieren und b) dich mit Gruppenwechsel anfreunden. Oder evtl. auch mehrfach die selbe Tabelle joinen?

    Meine Idee wäre, die Styles aus der Tabelle Styles in ein Array abzulegen und dann bei der Ausgabe die ID durch den Namen zu ersetzten lassen.
    ABER wie???
    Die Idee ist zwar nicht sonderlich gut, aber woran scheiterst du denn? Sicher bekommst du die Daten ins Array rein und wie man auf einem bestimmten Array-Index (=ID) zugreift, sind genauso Grundlagen.

    Kommentar


    • #3
      So, also ich habe heute einiges gegooglet. Gruppenbildung, Datenbank normalisieren etc.
      Und dann habe ich mit einem Kumpel telefoniert und auch ihm mein Problem geschildert. Er meinte sofort, du brauchst eine weitere Tabelle.
      So wie er mir das erklärt hat, habe ich das auch verstanden.

      Also nun habe ich (erstmal) drei Tabellen:
      competition1 (com_id/pic_link )
      verweis (verweis_id/com_id/style_id)
      style (style_id/stylename)

      Während ich nun in die competition1 Tabelle immer nur ein Bild einfüge mit einer com_id, kann ich in die Verweis Tabelle nun mehrere Einträge mit der gleichen com_id machen.
      Aber wie löse ich nun die Anzeige, ich habe keine Ahnung.
      Ich möchte gerne das Bild(pic_link) einmal anzeigen lassen und dazu die stylename. Daran hat sich nix geändert.
      Vielleicht kann mir ja jemand, nen bisschen auf die Sprünge helfen.

      Mit dieser Abfrage:
      PHP-Code:
      <?php
      include "../includes/db_daten.php";
      $style $mysqli->query(
          SELECT  * FROM  competition1,verweis,style                           
          WHERE 
          competition1.com_id=verweis.com_id
          AND
          verweis.style_id=style.style_id "
      );
          {         
               while(
      $daten $style->fetch_array()) 
                  {   
                   echo 
                        
      "<table><tr>
                        <td>"  
      .  ($daten['com_id']) ."</td>"
                        
      "<td>"  .  ($daten['pic_link']) ."</td>"
                      
      "<td>"  htmlspecialchars ($daten['style_id']) . "</td>"
                      
      "<td>"  htmlspecialchars ($daten['stylename']) . "</td></tr>";
                  }
                 
      $style->close();
               echo 
      "</table>";
        
          }
      ?>
      bekomme ich dieses ergebnis. Was ich so halt nicht möchte.
      HTML-Code:
      1	../vollbild/2403-08-Michelle.jpg	3	tri top
      1	../vollbild/2403-08-Michelle.jpg	6	mirco knicker
      2	../vollbild/2404-04-Christine.jpg	5	lighthouse shorts
      2	../vollbild/2404-04-Christine.jpg	10	hot shorts
      Ich möchte
      HTML-Code:
      1 ../vollbild/2403-08-Michelle.jpg 3 tri top 6 mirco knicker
      2 ../vollbild/2404-04-Christine.jpg 5 lighthouse shorts 10 hot shorts

      Kommentar


      • #4
        Dann wandel es doch einfach um. Das stichwort Gruppenwechsel wurde dir bereits genannt!

        Kommentar


        • #5
          Ja danke TobiaZ. Wenn ich was vernünftiges finden würde zum Gruppenwechsel, meinste dann würde ich hier noch weiter fragen??

          Ein simples Beispiel würde mir ja reichen. Learning by doing.

          Kommentar


          • #6
            PHP-FAQ: - Was ist ein Gruppenwechsel?

            Kommentar


            • #7
              Hab ich gelesen, was bringt mir das nun? Ohne Erklärung? einfach nur KOT.

              Ich würde auch gerne verstehen warum ich was mache. Mit $old = ' '; kann ich nichts anfangen. Weil ich es nicht verstehe..

              Kommentar


              • #8
                $old speichert einfach den aktuellen (bzw. im nächsten Schleifendurchlauf dann den letzte) Wert für die zu grupppierende Eigenschaft. In deinem Fall kommt da halt die com_id rein, denn nach der willst du gruppieren. (statt old wäre wohl last) der bessere Name, gebe ich zu.

                Aber ansonsten ist das Beispiel so simpel gehalten, dass es denke ich selbsterklärend ist. Anderenfalls frag nach, aber hör auf rumzunörgeln. Es ist DEIN Problem, bei dem wir nur freiwillig und unentgeltlich versuchen wollen zu helfen. Es gibt also keinen Grund hier fordernd zu werden.

                Kommentar


                • #9
                  Sicherlich helft ihr alle nur unentgeltlich, das mache ich auch bei meinen Kollegen. da habe ich auch nicht immer die passende antwort parat. aber ich kann beispiele nennen. und mehr möchte ich ja gar nicht. weder fordernd noch nörgelnt. Und ganz klar ist es mein problem. das steht ausser frage.

                  ich hatte nur die hoffnung das hier auch anfängern geholfen wird. man muss aber anscheinend eigentlich schon alles beherrschen, sonst wird einem nicht geholfen. Jeder hat mal angefangen, der eine 2001 der andere 2010.

                  Tue dir mal den Gefallen, so wie ich es getan habe und google nach gruppenwechsel php, und bekommst du ein passendes ergebnis?

                  Kommentar


                  • #10
                    TobiaZ wollte Dir mit der "Gruppenbildung" nur sagen, dass Du Dir während Deiner Ausgabe die Gruppe merken sollst, um darauf einzugehen.

                    Wenn ich's richtig verstanden habe, wäre Deine Gruppe entweder $daten['com_id'] oder $daten['pci_link'].

                    Durch die Hilfsvariable $last merkst Du Dir (wie in dem Gruppenbildungs-Beispiel) die zuletzt abgearbeitete Gruppe und änderst entsprechend die Ausgabe.

                    (Tabellen-Code lasse ich aus Gründen der Übericht weg.)

                    PHP-Code:
                    [...]
                    $last "";
                    while(
                    $daten $style->fetch_array())
                    {
                       if (
                    $last != $daten['com_id'])
                       {
                          echo 
                    "<br>";
                          echo 
                    $daten['com_id'] . " ";
                          echo 
                    $daten['pic_link'] . " ";
                          echo 
                    htmlspecialchars ($daten['style_id']) . " ";
                          echo 
                    htmlspecialchars ($daten'stylename']) . " ";
                          
                    $last $daten['com_id'];
                       }
                       else
                       {
                          echo 
                    htmlspecialchars ($daten['style_id']) . " ";
                          echo 
                    htmlspecialchars ($daten'stylename']) . " ";
                       }
                    }
                    [...] 
                    Ich hoffe, ich hab' nichts übersehen...ist schon spät.



                    Warum's TobiaZ so umständlich macht mit seiner Hilfe...tja, daran muss man sich leider in PHP-Foren gewöhnen. Manche Helfer werfen einem Fragenden lieber seitenweise Informationsbrocken zu, anstatt nur 1/10 der Zeit zu investieren, um einfach den helfenden Code hinzutippern.

                    Aber wir wollen uns ja nicht

                    Wir haben uns ja schließlich alle lieb.


                    cya



                    P.S.:
                    Meiner Meinung nach sollte jeder noch so simpel gehaltene und scheinbar selbsterklärende Quellcode kommentiert werden, falls er dazu dienen soll, etwas zu erklären bzw. aufzuzeigen.

                    Kommentar


                    • #11
                      Es wurde nach einem Simplen Beispiel gefragt. Mein Code ist wirklich aufs wesentliche reduziert gewesen. Wer ein langes Tutorial will, der liest den zig-fach hier im Forum verlinkten Blog von Amica. Man muss nun wirklich nicht in jedem Thread alles von vorne erzählen.

                      Kommentar


                      • #12
                        Zitat von TobiaZ Beitrag anzeigen
                        Es wurde nach einem Simplen Beispiel gefragt.
                        Auch zu einem simplen Beispiel kann man 1 oder 2 erklärende Sätze schreiben.

                        Zitat von TobiaZ Beitrag anzeigen
                        Mein Code ist wirklich aufs wesentliche reduziert gewesen.
                        Würde ein um Hilfe Fragender hier einen Code ohne jeglichen Kommentar posten, gäb's doch auch
                        Warum sollte also ein erklärender Code nicht kommentiert werden?

                        Zitat von TobiaZ Beitrag anzeigen
                        Wer ein langes Tutorial will
                        Verdreh' mir bitte nicht das Wort. Ich sage nicht, dass Dein Beispiel schlecht ist, ich sage nicht, dass es völlig unverständlich ist und ich sage auch nicht, dass Du seitenweise Text dazuschreiben sollst.

                        Ich habe lediglich darauf hingewiesen, dass ich es besser finden würde, wenn man 1-2 Sätze dazuschreibt, um das Thema einfach direkt auf den Punkt zu bringen.

                        Zum Glück ahnte ich schon, worauf Du hinaus wolltest (kannte den Begriff aber nicht) und ich bin ja nun auch nicht gerade der unerfahrendste Programmierer, aber selbst ich habe 3x hinsehen müssen, um sicherzugehen, dass Du das meinst, was ich denke, was Du meinst.

                        cya

                        Kommentar


                        • #13
                          Hallo,

                          ich weiß nicht, ob es (noch) hilft, aber ich hab zum Thema Gruppenwechsel mal im Blog geschrieben. Ich gebe zu, es ist nicht besonders gut erklärt, aber vielleicht ist es trotzdem halbwegs nachvollziehbar. Die Idee dahinter ist jedenfalls einfacher und flexibler als die mit der $old- oder $last-Variable.

                          Edit: vielleicht gleich noch ein simples Beispiel:

                          Eine Abfrage nach Möbelstücken (name, color) ergibt z. B. so etwas wie

                          Tisch, Buche
                          Wandregal, Kirsche
                          Schreibtisch, Birke hell
                          Wandschrank, Eiche rustikal
                          Schreibtisch, Kirsche
                          Tisch, Eiche rustikal
                          Wandregal, Buche

                          Will man jetzt nach der Farbe gruppieren, geht man so vor:

                          PHP-Code:
                          $data = array();
                          while (
                          $row mysql_fetch_assoc($result)) {
                              
                          $color $row["color"];
                              
                          $data[$color][] = $row// nachträglich korrigiert
                          }
                          print_r($data); 
                          Natürlich kann man jetzt auch $row["name"] zum Gruppieren verwenden und es wird die Ergebnisse dem Namen nach ausspucken.

                          Gruß,

                          Amica
                          Zuletzt geändert von AmicaNoctis; 21.11.2010, 22:23.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            @Amica: Deinen Blog-Beitrag hatte ich verlinkt.

                            Aber müsste
                            PHP-Code:
                            $data[$color] = $row
                            nicht
                            PHP-Code:
                            $data[$color][] = $row
                            heißen?

                            Kommentar


                            • #15
                              Zitat von TobiaZ Beitrag anzeigen
                              @Amica: Deinen Blog-Beitrag hatte ich verlinkt.
                              Na eben, hatte ich nicht bemerkt.

                              Zitat von TobiaZ Beitrag anzeigen
                              Aber müsste
                              PHP-Code:
                              $data[$color] = $row
                              nicht
                              PHP-Code:
                              $data[$color][] = $row
                              heißen?
                              Völlig richtig. Ich editier das mal eben noch. Danke für den Hinweis.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X