SQL-Abfrage mit Ausgabe limitierter Datensätze

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

  • SQL-Abfrage mit Ausgabe limitierter Datensätze

    Hallo zusammen,

    ich brauche mal einen einen MYSQL Spezialisten.

    Das Problem ist:

    Ich habe 1 Tabelle mit folgendem Inhalt

    ORT | Name
    ===========
    FFM | Name1
    FFM | Name2
    FFM | Name3
    FFM | Name4
    FFM | Name5
    FFM | Name6
    OF | Name7
    OF | Name8
    OF |USW.
    OF |
    DA |Name1001
    DA |Name1002

    Wie kann ich das folgende Ergebnis mit einer mySQL-Query umsetzten


    ORT | Name
    ===========
    FFM | Name1
    FFM | Name2
    OF | Name7
    OF | Name8
    DA | Name999
    DA | Name1000

    Also immer nur 2 Datensätze für eine Ort ausgeben mit unterschiedlichem Name.

    Hat jemand eine Idee?

    Danke
    Berni

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

  • #2
    PHP-Code:
    <?php
        $select 
    "SELECT DISTINCT(ort) AS ort FROM tabelle";
        
    $berni mysql_query($select);
        while (
    $hand mysql_fetch_assoc($berni)) {
            
    $innerselect "SELECT ort, name FROM tabelle where ort = '$hand[ort]' LIMIT 2";
            
    $innerberni mysql_query($innerselect);
            while (
    $innerhand mysql_fetch_assoc($innerberni)) {
                print 
    "$innerhand[ort] | $innerhand[name]<br>\n";
            }
            
    mysql_free_result($innerberni);
        }
        
    mysql_free_result($berni);
    ?>

    Kommentar


    • #3
      mh... bekommst du das auch in einem SQL-Statement hin ??

      gruss

      Kommentar


      • #4
        Nein - Ich nicht - aber za was?
        Du?

        Kommentar


        • #5
          thanks Hand,

          deine Lösung erzeugt zu viele DB-Zugriffe.
          Ich brauche eine SQL-Anweisung. Ich dachte da an Having und Group by.

          Gruß
          Berni

          php-Entwicklung | ebiz-consult.de
          PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
          die PHP Marktplatz-Software | ebiz-trader.de

          Kommentar


          • #6
            Und wenns gar nicht geht anders?
            Was dann? Das mit dem Limit 2 ist schon eine Herausforderung - ich behaupte einfach ganz frech, das geht nicht anders.

            Bin mal gespannt auf eine Lösung ....

            Kommentar


            • #7
              Mit einem SELECT ginge es auch, wenn man danach ensprechend die Daten nach Ort-Gruppenwechseln verarbeitet.

              SELECT ort, name FROM tabelle ORDER BY ort, name

              Aber wahrscheinlich spricht auch die Datenmenge (Timeout) dagegen.

              Was wäre wenn man die Anforderung von zwei Records je Ort auf einen Record zurückschraubte?

              Kommentar


              • #8
                Mit dem Gruppenwechsel habe ich mir auch schon überlegt.
                Ich glaube aber auch das es mit mysql nicht funktioniert.

                Naja Dann müssen halt ein paar SQL-Anweisungen her

                thank
                berni

                php-Entwicklung | ebiz-consult.de
                PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                die PHP Marktplatz-Software | ebiz-trader.de

                Kommentar


                • #9
                  Ich denke das geht nicht, aber was geht ist doch in der while ($result) Schleife einfach immer wenn der Ort gleich ist nur die ersten beiden datensätze auszugeben.
                  etwa so:

                  $anz_ort = 0;
                  $result = mysql_query("SELECT * FROM tbl");
                  while ($zeile = mysql_fetch_row($result)) {
                  if($ort != $zeile[0]) $anz_ort = 0;
                  $ort = $zeile[0];
                  if($anz_ort < 2) echo $zeile[0].":".$zeile[1]."<br>";
                  $anz_ort++;
                  }

                  Dann haste eine Abfrage und gibst nur aus was Du willst
                  Zuletzt geändert von MelloPie; 08.08.2002, 22:03.
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    jo, und was mache ich bei 150000 Datensätze?
                    Das würde ziemlich lang dauern..

                    Danke
                    Berni

                    php-Entwicklung | ebiz-consult.de
                    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                    die PHP Marktplatz-Software | ebiz-trader.de

                    Kommentar


                    • #11
                      Hm... da magste Recht haben, wie schauts aus mit zwischenspeichern in einer temp tabelle mit

                      SELECT INTO tmp_tbl blabla

                      Das ganze zweimal machen mit LIMIT 0,1 und LIMIT 1,1 bei gleichem SQL Statement und der angesprochenen GROUP BY ort Gruppierung,

                      dann das Ergebnis aus der tmp_tbl mit ORDER BY ort lesen...
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar

                      Lädt...
                      X