Tanja: Datenbankauslese

Ich habe auf unserer Homepage (www.isd.uni-stuttgart.de) die Mitarbeiter-
Informationen in einer Datenbank. Die Ausgabe listet mir nun alle
Mitarbeiter alphabetisch sortiert auf. Ich möchte gerne, dass automatisch
vor jedem Nachnamen mit neuem Buchstaben im Alphabet der Buchstabe steht
und man dann oben von einer Navigationsleiste aus auf den Buchstaben
springen kann:

A B C D .....

A
Abele, Tanja
Ablabla, Egon

B
Brinkmann, Holger
Bäumler, Jürgen.

Die Generierung der Buchstaben soll jedoch dynamisch erfolgen, so dass ich
nicht für jeden neuen Buchstaben die DB-Auslese neu schreiben muss.

Vielleicht hat ja jemand schon mal selbiges gemacht.

  1. hallöchen

    <a href="#a1"><b>A</b></a>
    <a href="#a2"><b>B</b></a>
    <a href="#a3"><b>C</b></a>
    ...

    <?
       $i=0;
       while ($i<$anzahl_datensaetze) {
            $nachname= "datensatzauslesen";
            $zeichen = split ("", $nachname);
            if ($zeichen[0]=="A") echo "<a name='a1'>A</a><br>";
            if ($zeichen[0]=="B") echo "<a name='a2'>B</a><br>";
            if ($zeichen[0]=="C") echo "<a name='a3'>C</a><br>";
            ...
            echo $nachname."<br>";
            $i++;
       }
    ?>

    hilft Dir das vielleicht weiter ??? ;o)

    tschö mit ö
    mexchen

    1. hilft Dir das vielleicht weiter ??? ;o)

      Danke!
      Ich werde es einfach mal probieren... wenn es nicht geht, oder ich plötzlich andere Probleme hab, meld ich mich wieder...

      Yvi

    2. hallöchen

      sorry da fehlt noch was ;o)

      <a href="#a1"><b>A</b></a>
      <a href="#a2"><b>B</b></a>
      <a href="#a3"><b>C</b></a>
      ...

      <?

      "gesamtanzahl der datensätze auslesen"

      $i=0;
         while ($i<$anzahl_datensaetze) {

      $nachname= "den datensatz an position $i auslesen";

      $zeichen = split ("", $nachname);

      if ($zeichen[0]=="A" && $i==0) {
                    echo "<a name='a1'>A</a><br>";
                    $first="A";
                 }
                 if ($zeichen[0]=="B" && $first=="A") {
                    echo "<a name='a2'>B</a><br>";
                    $first="B";
                 }
                 if ($zeichen[0]=="C" && $first=="B") {
                    echo "<a name='a3'>C</a><br>";
                    $first="C";
                 }

      ...
              echo $nachname."<br>";
              $i++;
         }
      ?>

      ich hoffe es funzt ist ungetestet

      mexchen

      1. hallöchen

        sorry da fehlt noch was ;o)

        mexchen

        Ich kanns leider heute nicht mehr testen, aber vielen Dank. Das hilft mir auf jeden Fall weiter.
        Grüßle Tanja

      2. kleiner Zusatz: wenn du es ganz geschickt machen willst speicher in der ausleseschleife immer das vorhergehende Element. wenn sich das vom aktuellen unterscheidet schreib den anfangsbuchstaben vom aktuellen irgendwo hin.

        nur so falls du dir 26 Zeilen oder mehr an Schreibarbeit sparen willst und bei eventuellen Änderungen nicht so viel Arbeit hast...

        Grüße,

        Julian

        hallöchen

        sorry da fehlt noch was ;o)

        <a href="#a1"><b>A</b></a>
        <a href="#a2"><b>B</b></a>
        <a href="#a3"><b>C</b></a>
        ...

        <?
              "gesamtanzahl der datensätze auslesen"
           $i=0;
           while ($i<$anzahl_datensaetze) {
                   $nachname= "den datensatz an position $i auslesen";
                $zeichen = split ("", $nachname);
                   if ($zeichen[0]=="A" && $i==0) {
                      echo "<a name='a1'>A</a><br>";
                      $first="A";
                   }
                   if ($zeichen[0]=="B" && $first=="A") {
                      echo "<a name='a2'>B</a><br>";
                      $first="B";
                   }
                   if ($zeichen[0]=="C" && $first=="B") {
                      echo "<a name='a3'>C</a><br>";
                      $first="C";
                   }
                ...
                echo $nachname."<br>";
                $i++;
           }
        ?>

        ich hoffe es funzt ist ungetestet

        mexchen

        1. hi

          nur so falls du dir 26 Zeilen oder mehr an Schreibarbeit sparen willst und bei eventuellen Änderungen nicht so viel Arbeit hast...

          meinst du etwa so

          <?
          $ABC= array('A','B','C'...);

          for ($i=0; $i<27; $i++) echo "<a href='#a".$i."'><b>".$ABC[$i]."</b></a>";

          <?
              "gesamtanzahl der datensätze auslesen"
              $i=0; $ABC_z=0;
              while ($i<$anzahl_datensaetze) {
                    $nachname= "den datensatz an position $i auslesen";
                    $zeichen = split ("", $nachname);

          if ($i==0 || $ABC[$ABC_z-1]!=$zeichen) {
                         echo "<a name='a".$ABC_z."'>".$ABC[$ABC_z]."</a><br>";
                         $ABC_z++;
                    }

          echo $nachname."<br>";
                    $i++;
              }
          ?>

          aber auch hier bin ich mir nich sicher, is halt nur nen ansatz ;o)

          mexchen

          1. hi

            nicht ganz. aus Zeitgründen benutze ich jetzt keinen funktionierenden code sondern lediglich einen ungefähren Abriß..
            annahme ist, daß wir erst beim Auslesen der DB sind und der Nachname in einer eigenen Spalte steht.
            while(datenbankabfrage)
             {
            // wenn anfangsbuchstabe des neuen namens nicht mit anfangsbuchstaben des vorhergehenden namens übereinstimmt
              if (substr($nameausdb, 0,1) != substr($vorhergehendername, 0, 1))
               {
            // dann baue erstmal den anfangsbuchstaben - hier als großbuchstaben - ein
                echo "strtoupper(substr($nameausdb, 0, 1))";
               }
              echo $nameausdb;
              $vorhergehendername = $nameausdb;
            }

            müßte so ähnlich - natürlich mit richtiger Syntax und allem möglichn html-gedöns und so - richtig funktionieren...

            nur so falls du dir 26 Zeilen oder mehr an Schreibarbeit sparen willst und bei eventuellen Änderungen nicht so viel Arbeit hast...

            meinst du etwa so

            <?
            $ABC= array('A','B','C'...);

            for ($i=0; $i<27; $i++) echo "<a href='#a".$i."'><b>".$ABC[$i]."</b></a>";

            <?
                "gesamtanzahl der datensätze auslesen"
                $i=0; $ABC_z=0;
                while ($i<$anzahl_datensaetze) {
                      $nachname= "den datensatz an position $i auslesen";
                      $zeichen = split ("", $nachname);

            if ($i==0 || $ABC[$ABC_z-1]!=$zeichen) {
                           echo "<a name='a".$ABC_z."'>".$ABC[$ABC_z]."</a><br>";
                           $ABC_z++;
                      }

            echo $nachname."<br>";
                      $i++;
                }
            ?>

            aber auch hier bin ich mir nich sicher, is halt nur nen ansatz ;o)

            mexchen