Steffen: MySQL Abfrage bei "keinem Ergebnis" wiederholen

Hi,

ich möchte gerne meine Datenbankabfrage so lange wiederholen, bis min. ein Ergebnis gefunden wird.

  
$anzahl = 1;  
$sql = "SELECT name from `tabelle` WHERE `posts` = '".mysql_real_escape_string($anzahl)."%'";  
$select = mysql_query($sql);  
$total = mysql_num_rows($select);  
  
if($total==0)  
{  
$anzahl = $anzahl+1;  
//und jetzt die Abfrage wiederholen  
}  

Danke für eure Hilfe

Steffen

  1. Hello Steffen,

    ich möchte gerne meine Datenbankabfrage so lange wiederholen, bis min. ein Ergebnis gefunden wird.

    $anzahl = 1;
    $sql = "SELECT name from tabelle WHERE posts = '".mysql_real_escape_string($anzahl)."%'";
    $select = mysql_query($sql);
    $total = mysql_num_rows($select);

    if($total==0)
    {
    $anzahl = $anzahl+1;
    //und jetzt die Abfrage wiederholen
    }

      
      
    Ich könnte mir vorstellen, dass die Datenbank das für Dich schon mit einer einzigen Abfrage erledigen kann. Wie sie das intern regelt, ist dann sicherlich nahezu uninteresant.  
      
    Schau Dir mal  
    <http://dev.mysql.com/doc/refman/5.1/de/group-by-modifiers.html>  
    an.  
      
    Das ist mMn ein passender Weg zum Ziel :-)  
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://restaurant-zur-kleinen-kapelle.de>
    
  2. Hallo...

    ich möchte gerne meine Datenbankabfrage so lange wiederholen, bis min. ein Ergebnis gefunden wird.

    Danke für eure Hilfe

    Steffen

    und wenn es gar keines gibt dann dreht sich das im Kreis, und dreht sich und dreht sich... bis der Server Aua sagt.

    Du müsstest m.M.n. vorab feststellen ob es in einem Wertebereich SELECT ... WHERE BETWEEN x AND y was gibt. Dann könntest Du damit zumindest sicherstellen das sich das nicht totläuft.

    Gruß Helmut

    1. Hallo Helmut,

      das ist alles bereits berücksichtigt und wurde nur zur vereinfachten Darstellung nicht mit angegeben.

      grüße
      Steffen

      Hallo...

      ich möchte gerne meine Datenbankabfrage so lange wiederholen, bis min. ein Ergebnis gefunden wird.

      Danke für eure Hilfe

      Steffen

      und wenn es gar keines gibt dann dreht sich das im Kreis, und dreht sich und dreht sich... bis der Server Aua sagt.

      Du müsstest m.M.n. vorab feststellen ob es in einem Wertebereich SELECT ... WHERE BETWEEN x AND y was gibt. Dann könntest Du damit zumindest sicherstellen das sich das nicht totläuft.

      Gruß Helmut

  3. Hallo,

    ich möchte gerne meine Datenbankabfrage so lange wiederholen, bis min. ein Ergebnis gefunden wird.

    Du willst also die kleinste Anzahl an Posts größer 0 aus der Tabelle auslesen?

      
    SELECT name FROM tabelle WHERE posts = (SELECT MIN(posts) FROM tabelle WHERE posts > 0);  
    
    

    vg ichbinich

    --
    Kleiner Tipp:
    Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
  4. Äh. Beschreib doch mal, was Du WIRKLICH willst. Dein verunglückter Lösungsansatz sieht sehr nach Sackgasse aus.

    Jörg Reinholz

    1. Hello,

      Äh. Beschreib doch mal, was Du WIRKLICH willst. Dein verunglückter Lösungsansatz sieht sehr nach Sackgasse aus.

      Nee, der sieht nach Endlosschleife aus, wenn man die Datenbankdynamik einer kleinen Seite zu Grunde legt ;-P

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://restaurant-zur-kleinen-kapelle.de
    2. Hi,

      ich formuliere mein Vorhaben noch einmal übersichtlicher:

        
      //die $anzahl gebe ich vor  
      $anzahl = 1;  
        
      //hier sollen alle Namen abgefragt werden die 1 posts haben  
      $sql = "SELECT name from `tabelle` WHERE `posts` = '".mysql_real_escape_string($anzahl)."'";  
      $select = mysql_query($sql);  
      $total = mysql_num_rows($select);  
        
      //wenn kein Datensatz gefunden wurde  
      if(($total==0) && ($total<=5))  
      {  
      //hier sollen alle Namen abgefragt werden die 2 posts haben  
      $anzahl = $anzahl + 1;  
      $sql = "SELECT name from `tabelle` WHERE `posts` = '".mysql_real_escape_string($anzahl)."'";  
      $select = mysql_query($sql);  
      $total = mysql_num_rows($select);  
      }  
        
      //wenn noch immer kein Datensatz gefunden wurde  
      else if(($total==0) && ($total<=5))  
      {  
      //hier sollen alle Namen abgefragt werden die 3 posts haben  
      $anzahl = $anzahl + 1;  
      $sql = "SELECT name from `tabelle` WHERE `posts` = '".mysql_real_escape_string($anzahl)."'";  
      $select = mysql_query($sql);  
      $total = mysql_num_rows($select);  
      }  
      
      

      Die Abfrage soll so lange wiederholt/ausgeführt werden bis min. 1 Datensatz gefunden wurde.
      Das ist nur vereinfacht dargestellt. Bitte keine Belehrungen über den Sinn oder Unsinn - es ist nur ein Beispiel.

      Danke Steff

      1. Hi,

        ich formuliere mein Vorhaben noch einmal übersichtlicher:

        //hier sollen alle Namen abgefragt werden die 1 posts haben

        //wenn kein Datensatz gefunden wurde

        //hier sollen alle Namen abgefragt werden die 2 posts haben

        //wenn noch immer kein Datensatz gefunden wurde

        //hier sollen alle Namen abgefragt werden die 3 posts haben

        Die Abfrage soll so lange wiederholt/ausgeführt werden bis min. 1 Datensatz gefunden wurde.

        Also willst du eigentlich doch nur das, was ichbinich aus deiner verunglückten Beschreibung schon erraten hatte – oder etwa nicht?

        Das ist nur vereinfacht dargestellt. Bitte keine Belehrungen über den Sinn oder Unsinn - es ist nur ein Beispiel.

        Wenn es das, was du tatsächlich willst, nicht korrekt abbildet, ist es ein *untaugliches* Beispiel.

        Und wenn es das doch tut, und ichbinich richtig liegt – dann ist dein Ansatz Unsinn, egal ob du dem gegenüber belehrungsrestistent bist oder nicht ;-)

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          stellt eu eine Umkreissuche vor. Die Abfrage soll sinngemäß so lauten:

          Zeige alles aus der Datenbank wo der Umkreis = 10 ist.

          Wenn kein Datensatz gefunden wird soll eine erneute Abfrage gestellt werden:

          Zeige alles aus der Datenbank wo der Umkreis = 20 ist.

          Wenn kein Datensatz gefunden wird soll eine erneute Abfrage gestellt werden:

          Zeige alles aus der Datenbank wo der Umkreis = 30 ist.

          Wenn kein Datensatz gefunden wird soll eine erneute Abfrage gestellt werden:

          Zeige alles aus der Datenbank wo der Umkreis = 40 ist.

          Wenn kein Datensatz gefunden wird soll eine erneute Abfrage gestellt werden:

          Zeige alles aus der Datenbank wo der Umkreis = 50 ist.

          Nach max. 5 Abfragen ist Schluss, egal ob ein Datensatz gefunden wurde oder nicht.

          Danke Steff

          1. stellt eu eine Umkreissuche vor. Die Abfrage soll sinngemäß so lauten:

            auch dazu braucht man so ein Konstrukt nicht wirklich. Eine Abfrage würde genügen

            1. Das war ja auch meine Frage, aber ausser Belehrungen kam nicht viel...

              Danke an den, der den Sinn des Forums versteht und den richtigen Denkanstoss gegeben hat.

              1. Meine Herren!

                Das war ja auch meine Frage, aber ausser Belehrungen kam nicht viel...

                Es lag in deiner Macht das zu vermeiden.

                Danke an den, der den Sinn des Forums versteht und den richtigen Denkanstoss gegeben hat.

                Aha, ich sehe hier einen sehr schönen Threadbaum, der dich schnell zur Lösung geführt hat, trotz deiner nervigen Art.

                --
                “All right, then, I'll go to hell.”
              2. Das war ja auch meine Frage, aber ausser Belehrungen kam nicht viel...

                Da tust du aber einigen Unrecht. Die Frage wurde so verstanden dass du eine Abfrage dauernd wiederholt bis ein Ergebnis kommt. Das deutet kein bisschen drauf hin dass du irgendwelche Parameter dran verändern willst und auch nicht dass nach 5 mal Schluss sein soll.

                Danke an den, der den Sinn des Forums versteht und den richtigen Denkanstoss gegeben hat.

                Das warst du doch selbst, durch deine Erklärung was du *wirklich* vor hast :-)

              3. Hello Steffen,

                Das war ja auch meine Frage, aber ausser Belehrungen kam nicht viel...

                Ich nehme an, dass der NSA mein Posting auf Deinem PC nichte zur Anzeige kommen lässt, denn sonst hättest Du spätestes nach dem Durchlesen und der Naychverfolgung des Links gefragt: "und wie kann ich das jetzt für mich nutzbar machen?" oder es sogar gleich selber gewusst und umgesetzt.

                https://forum.selfhtml.org/?t=216418&m=1483960

                Eine gruppierte Abfrage (mit Limits) ist mMn immer noch die elagenteste Art und weise, alle möglichen Ergebnisse in einer sortierten Liste zu erhalten. Die kannst Du dann abarbeiten.

                Da sie ja über die Gruppierung sortiert ist, ist es einfach, das kleinste oder größte Ergebnis sofort abzulesen.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://restaurant-zur-kleinen-kapelle.de
          2. Mahlzeit,

            Nach max. 5 Abfragen ist Schluss, egal ob ein Datensatz gefunden wurde oder nicht.

            Und wieso fragst du nicht ab, was alles im Umkreis von 50km ist und ermittelst dann im Script die einzelnen Werte? Wäre billiger als 5 Datenbankabfragen.

            --
            42
          3. Tach!

            stellt eu eine Umkreissuche vor.

            Weißt du, es gibt für ähnlich aussehende Probleme durchaus unterschiedliche Lösungen. Wenn du dein Problem nur zu allgemein beschreibst, ohne dass der konkrete Sachverhalt deutlich wird, wird man dir mit einer Standardlösung kommen, die dann aber für deinen Fall doch ungünstig ist. Deswegen ist es für potentielle Antworter günstig/wichtig, zu wissen was das eigentliche Ziel ist. Das hätte bei dir auch ein Group By mit Count sein können. Der Vorschlag, gleich alle Daten für 50km abzufragen, kann performanter sein als 5 Einzelabfrage. Es kann aber auch sein, dass dann eine Ergebnismenge entsteht, die nicht mehr effizient weiterbearbeitet werden kann und dann doch wieder die Einzelabfragen besser sind. Man muss/sollte solche und andere Randbedingungen berücksichtigen, um zu einer optimalen Lösung zu kommen.

            dedlfix.

      2. Hi,

        Die Abfrage soll so lange wiederholt/ausgeführt werden bis min. 1 Datensatz gefunden wurde.
        Das ist nur vereinfacht dargestellt. Bitte keine Belehrungen über den Sinn oder Unsinn - es ist nur ein Beispiel.

        eigentlich wäre dann der Themenbereich PHP passender. Beschäftige dich mit Schleifen.
        Zum Beispiel:

        http://www.php.net/manual/de/control-structures.do.while.php

          
        $i = 1;  
        do {  
            // datenbankabrage ($total = Ergbnismenge)  
           $i++; // i um den Wert 1 erhöhen  
        } while (!$total); // solange bis $total einen Wert > 1 hat  
        ?>  
          
        
        

        kann natürlich ewig laufen, diesen Konstrukt. Nur mal als Beispiel

        1. Hallo und besten Dank,

          das ist eine Antwort wie ich sie mir erhofft habe.
          Damit kann ich mein Vorhaben abbilden.

          Danke Steff