butterbrot: MySql/php-> next id finden.

Abend
Gibt es eine enifache möglichkeit in php/mysql die nachbar id zu finden?
---------------------------------------------------------------
z.B.
ID   NAME      ALTER
 1   Hans      12
 2   Peter     9
 3   Jacob     19
 5   Max       4
 8   Urlike    2
 9   Annika    17
12   Saskia    21

Jetzt davon alle auswäheln, welche älter als 10 jahre sind und das ganze nach dem alter ordnen ->

ID   NAME      ALTER
 1   Hans      12
 9   Annika    17
 3   Jacob     19
12   Saskia    21

Jetzt auf den datensatz mit der id '9' gehen. ->

ID   NAME      ALTER
 1   Hans      12
 9   Annika    17      <--
 3   Jacob     19
12   Saskia    21

Davon möchte ich jetzt die nächst/vorherige id raus finden. ->

ID   NAME      ALTER
 1   Hans      12
 9   Annika    17
 3   Jacob     19      <--nächster
12   Saskia    21

Was währe den dafür die beste lösung?

  1. Hallo butterbrot.
    Sorry,
    Könntest Du mal ne konkrete Aufgabenbeschreibung liefern?
    Es gibt da meiner Ansicht nach verschieden Ansätze:
    1. Du ordnest die Daten nach Alter liest sie komplett in ein neues Array ein und vergibst neue Schlüssel
    2. Du Ordnest die die daten nach Alter, dann rufst du die Daten auf mit der limit Function, un d dann eifach plus 1 Also LIMIT 30,31 zBsp.
    Na und wenn ich so nachdenke fallen mir noch einige Möglichlkeiten ein
    TomIRL

  2. hab ne lösung gefunden

    $next = mysql_fetch_assoc(mysql_query("SELECT id FROM tabel WHERE group = 'negruppe' AND date > ".$info[date]." ORDER BY date DESC"));

    1. hab ne lösung gefunden

      $next = mysql_fetch_assoc(mysql_query("SELECT id FROM tabel WHERE group = 'negruppe' AND date > ".$info[date]." ORDER BY date DESC"));

      Hab auch ne Lösung:
      Suche nach dem Datensatz, dessen Alter größer ist, als das Alter des Datensatzes mit der id "9" und LIMITiere die Ausgabe auf einen Datensatz.

      Erstmal: Das Alter steht ja fest, das ist die 17, also
      $alter= 17;
      Query könnte ungefähr so aussehen:
      select id from table1 where alter > $alter LIMIT 1;

      OK, das ist blöd, weil Alter kein Key ist, sondern die ID ( man kann ja mehrere Datensätze mit dem Alter von 17 haben)

      Aaaalso schau mer mal in der MySQL-Doku, die es zum Glück nicht in einem gescheiten deutschen Format gibt.

      ....such
      Leider nichts gefunden :-(
      Aber wenn man in PHP ein select macht, werden die Daten in einem Ergebnis-Array (Result-Set)gespeichert. Dies kann man mit einer for-Schleife durchgehen, bis man auf das Ergebnis mit der ID 9 kommt. Das $i von dieser Zeile ist der erste Wert von LIMIT. Der zweite Wert ist eine 1 für eine Zeile.
      Also ungefähr so:
      Du liest die ID der Zeile mit den 17 Jahren aus.
      $my_id = 9;

      dann erstmal wie folgt:

      $query = "select id from table1 ORDER BY ALTER";
      $result = mysql_query($query);
      $num = mysql_num_rows($result);

      das hat Nur Wert, wenn mehrere Reihen existieren

      if ($num > 1)    {
         for ($i = 0; $i < $num; $i++)    {
            $id = mysql_result($result, $i, 'id');
            if ($id == $my_id)   {
               ## setzt ersten Wert von LIMIT ($n)
               $n = $i;
               ## Prüfen, ob es der letzte Datensatz ist:
               if ($i == $num)   {
                  die("Es existiert kein Eintrag nach ID $my_id");
                  .......
               }
               ## Ansonsten $i hochsetzen, das die Schleife aufhört
               else   {
                  $i = $num;
               }
            }
         }
         $query = "select * from table1 LIMIT $n,1";

      .....

      }
      else   {
         die("Es existiert kein Eintrag nach ID $my_id");
      }

      Naja, besser als keine Antwort :-)

      Grüße, ein mittlerweile confuse-ter Matrix :-)