Zwei Tabellen unterschiedliche Begrenzung

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

  • Zwei Tabellen unterschiedliche Begrenzung

    Hallo,
    Ich habe zwei Tabellen, die ich verbinde mit join.

    Wie bekomme ich es hin, dass ich aus tab1 alle Datensätze auslese und aus tab2 nur jeweils die ersten 3?

    Also zum Beispiel:

    Ich möchte alle DS aus tab1, also *
    Aus tab2 möchte ich die ersten 3, wo tab2id = tab1id ist.

    Und dann das ganze noch in einer while Schleife, sodass zu jedem DS aus tab1 die 3 ersten DS aus tab2 ausgegeben werden.

  • #2
    Re: Zwei Tabellen unterschiedliche Begrenzung

    Du kannst doch mit einem Join nicht auf der einen Seite einen Datensatz auslesen und auf der anderen 3 Datensätze....
    Wie wäre es einfach, wenn du das mit 2 Abfragen machen würdest? Erste Abfrage für das Ding, wo du nur den einen haben willst, und dann in der While-Schleife eine Abfrage für die, wo du 3 haben willst und da dann mit LIMIT auf 3 begrenzen......aber so genau, kann man das jetzt nicht sagen, wäre praktisch mal nen Query zu haben!

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      query

      $i=1;

      $sql = mysql_query("SELECT * FROM kategorie1 ORDER BY bezeichnung");
      while ($result = mysql_fetch_array($sql)){

      $sql2 = mysql_query("SELECT kategorie1.id as kat1id, kategorie2.bezeichnung as kat2bez, kategorie2.idkat1 as kat2id1 FROM kategorie1, kategorie2 WHERE kategorie2.idkat1=kategorie1.id ORDER BY kategorie2.bezeichnung DESC LIMIT 3");
      while ($result = mysql_fetch_array($sql2)){

      echo "<td>";
      echo "<a href=\"anzeigen2.php?anz=$result[id]\">$result[bezeichnung]</a> ($row[gesamtanz])<br>$result2[kat2bez]</td>";

      $i++;
      if ($i == "3"){
      echo "</tr><tr>";
      $i = 1;
      }

      }
      }
      Liest das zwar das Ergebnis aus, aber die Daten werden nicht richtig ausgegeben. Möchte zum Beispiel DS1 aus dem 1.query ausgeben und dazu dann die drei ersten DS aus dem 2.query. Das ganze Zweispaltig.

      Beispiel: www.web.de der Kleinanzeigenmarkt

      Kommentar


      • #4
        Re: query

        Als allerallererstes...wenn du Code im Forum benutzt, nutze bitte die PHP-Tags dafür!
        Dadurch wird das Lesen von deinem Code schon wesentlich einfacher!

        Und dann poste nochmal kurz die Strukturen der beiden SQL-Tables..ist doch etwas komplizierter als ich gedacht hab, weil die Spalten komische Namen haben XD"


        (Zur richtigen Sichtweise nochmal der Code mit PHP-Tags, unverändert!)
        PHP-Code:
        $i=1;

        $sql mysql_query("SELECT * FROM kategorie1 ORDER BY bezeichnung");
        while (
        $result mysql_fetch_array($sql))
        {
         
        $sql2 mysql_query("SELECT kategorie1.id as kat1id, kategorie2.bezeichnung as kat2bez,
          kategorie2.idkat1 as kat2id1 FROM kategorie1, kategorie2 WHERE kategorie2.idkat1=kategorie1.id 
          ORDER BY kategorie2.bezeichnung DESC LIMIT 3"
        );
         while (
        $result mysql_fetch_array($sql2))
         {
          echo 
        "<td>";
          echo 
        "<a href=\"anzeigen2.php?anz=$result[id]\">$result[bezeichnung]</a> ($row[gesamtanz])
           <br>
        $result2[kat2bez]</td>";

          
        $i++;
          if (
        $i == "3")
          {
           echo 
        "</tr><tr>";
           
        $i 1;
          }
         }


        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Re: Re: query

          OffTopic:

          Bei so einem "Durcheinander" wundert es mich nicht, dass nur wenige bis gar keiner den PHP-Code sich anschaut!


          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
          sondern mit den Augen das Manual zu lesen.

          Kommentar


          • #6
            ok, danke für den Hinweis

            Also die Struktur der beiden Tables ist:

            tbl kategorie1
            -> id, bezeichnung

            tbl kategorie2
            -> id, bezeichnung, idkat1

            In der Tabelle kategorie2 im Feld idkat1 wird die id aus kategorie1 gespeichert, um alle Datensätze richtig zuordnen zu können.

            Kommentar


            • #7
              Re: Re: query

              PHP-Code:
              $sql 'SELECT kategorie1.id kategorie1_id, kategorie1.bezeichnung kategorie1_bezeichnung,
                 kategorie2.id kategorie2_id, kategorie2.bezeichnung kategorie2_bezeichnung, kategorie2.idkat1
                 kategorie2_idkat1
                     FROM kategorie2 kategorie2
                     INNER JOIN kategorie1 kategorie1 ON kategorie2.idkat1=kategorie1.id 
                     ORDER BY kategorie1.bezeichnung, kategorie2.idkat1, kategorie2.bezeichnung
                     LIMIT 0, 3'
              ;
              $result mysql_query($sql);
              echo 
              '<table border="2">' "\n";
              while (
              $row mysql_fetch_assoc($result))
              {
               echo 
              '<tr><td>' print_r($rowtrue); . '</td></tr>' "\n";
              }
              echo 
              '</table>' "\n"
              Was sagt der Meister denn du der Ausgabe? Du hast alle Sachen, die du brauchst in einer Variablen und auch nur einen Query und nur eine While-Schleife. Die Ausgabe muss dahin, wo das print_r jetzt steht, und es ist auf 3 Datensätze beschränkt. Und wenn mich nicht alles täuscht, müsste das Ding auch richtig sortiert sein, außer du willst es anders sortiert haben.
              Probiers aus und poste was du rausbekommst ^_~

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Danke erstmal

                Wenn ich nun das hier ausgeben lasse

                echo "<tr><td>$row[kategorie1_bezeichnung]<br>$row[kategorie2_bezeichnung]</td></tr>";

                zeigt er mir folgendes:

                Auto
                VW

                Auto
                BMW

                Auto
                Passat

                Das wars.

                Es sollte eigentlich so aussehen:

                Auto
                VW, BMW, Passat

                ... (hier die nächste kategorie1 zum Beispiel
                Haus
                1-Zimmer, 2 Zimmer usw.

                Danke für deine Hilfe

                Kommentar


                • #9
                  Es wäre ratsam mal zu sehen, wie Deine Tabellen aufgebaut sind! So führt das zu nix!

                  Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                  sondern mit den Augen das Manual zu lesen.

                  Kommentar


                  • #10
                    eigentlich nichts Besonderes

                    <?php
                    <table cellspacing=0 cellpadding=3 class=maintab width=100% border=1>
                    <tr><td bgcolor=#fffff0 class=tab valign=top colspan=2><b>Anzeigen - Übersicht</b></td></tr>
                    <tr>

                    $sql = 'SELECT kategorie1.id kategorie1_id, kategorie1.bezeichnung kategorie1_bezeichnung,
                    kategorie2.id kategorie2_id, kategorie2.bezeichnung kategorie2_bezeichnung, kategorie2.idkat1
                    kategorie2_idkat1
                    FROM kategorie2 kategorie2
                    INNER JOIN kategorie1 kategorie1 ON kategorie2.idkat1=kategorie1.id
                    ORDER BY kategorie1.bezeichnung, kategorie2.idkat1, kategorie2.bezeichnung
                    LIMIT 0, 3';

                    $result = mysql_query($sql);

                    echo '<table border="2">' . "\n";
                    while ($row = mysql_fetch_assoc($result))
                    {
                    echo "<tr><td>$row[kategorie1_bezeichnung]<br>$row[kategorie2_bezeichnung]</td></tr>";
                    }
                    echo '</table>' . "\n";
                    ?>

                    Kommentar


                    • #11
                      MySQL-Tabelle!

                      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                      sondern mit den Augen das Manual zu lesen.

                      Kommentar


                      • #12
                        Original geschrieben von xManUx
                        MySQL-Tabelle!
                        Wenn du bitten dir den KOMPLETTEN Thread durchlesen würdest bevor du postest


                        und @ iceT
                        Du musst nur die Kategorie1 in einer Variablen speichern, und nur ausgeben lassen, wenn sie sie ungleich mit der Kategorie in $row ist. Das ist eine Variable, die du updaten musst, + eine If-Abfrage....da musst du jetzt mal selbst überlegen!

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          PHP-Code:

                          $sql_cats 
                          "

                          SELECT 
                             id
                          FROM
                            kategorie1
                          GROUP BY
                             bezeichnung
                          ORDER BY
                             bezeichnung ASC
                          "
                          ;

                           
                          $result mysql_query($sql_cats) or die ( mysql_error());
                            while ( 
                          $ag1 mysql_fetch_array($result) ) {
                            
                              
                          $cat[] = $ag1['id']; 
                            
                           }


                          foreach ( 
                          $cat AS $var ) {

                           echo 
                          "<tr>";

                          $sql2 "

                          SELECT 

                             k1.id as kat1id, 
                             k2.bezeichnung as kat2bez, 
                             k2.idkat1 as kat2id1 

                          FROM 

                             kategorie1 k1

                          INNER JOIN 

                             kategroie2 k2 ON k1.id = k2.idkat1

                          WHERE 

                            k2.idkat1 = '"
                          .$var."'

                          ORDER BY 

                            k2.kat2bez ASC 

                          LIMIT 3  

                          "
                          ;

                           
                          $result2 mysql_query($sql2) or die ( mysql_error());
                            while ( 
                          $ausgabe mysql_fetch_array($result2) ) {
                            
                             echo 
                          "<td> ".$ausgabe['bezeichnung']." </td>";
                            
                          }

                           echo 
                          "<tr>";


                          Zuletzt geändert von xManUx; 28.11.2004, 16:34.

                          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                          sondern mit den Augen das Manual zu lesen.

                          Kommentar


                          • #14
                            @xManUx
                            *autsch* ... ne query in einer schleife? ist nicht dein ernst.
                            ghostgamblers ansatz ist da schon ok.
                            Kissolino.com

                            Kommentar


                            • #15
                              Original geschrieben von Wurzel
                              @xManUx
                              *autsch* ... ne query in einer schleife? ist nicht dein ernst.
                              ghostgamblers ansatz ist da schon ok.
                              Wieso? Mit so einer Aktion treibt man Statistiken hoch XD

                              aber btw. find ich meine Möglichkeit aus mehreren Gründen besser:
                              1. Man hat nicht soviele Variablen
                              2. man hat in der Variblen $row immer zusätzlich zu den Infos der Kategorie2 auch die der ersten Kategorie
                              3. Ist es weniger Code und somit übersichtlicher
                              4. weil's mein Code ist (eigenen Code findet man immer besser XD)

                              aber im Endeffekt ist es ja egal, wie er es macht. Bei einer so kleinen Struktur, bin ich mal so frech und erwarte da nicht sehr viel hinter ^^"

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X