TIMO: Liste der Anfangsbuchstaben

Hi,

ich möchte aus meiner DB eine Liste mit den möglichen Anfangsbuchstaben ausgeben, habe das so versucht:

<?
//Alphaliste
$query1 = "
SELECT
    members.lname
FROM
    members
ORDER BY
    members.lname
";
$result1 = MYSQL_QUERY($query1,$conn);
while ($row = mysql_fetch_array ($result1))
{
echo substr($row["lname"],0,1)." - ";
}
?>

Allerdings werden dann auch doppelte Anfangsbuchstaben angezeigt, dass soll nicht sein. Wenn z.B. die Namen Meier, Müller, Milster in der DB stehen, soll nur einmal "M" ausgegeben werden.

Wie mache ich das???

VG, TIMO

  1. Sup!

    Vielleicht suchst Du einfach in einer Schleife nach A*, B* (bzw. A%, B%) ... und wenn es einen oder mehr Treffer gibt, dann gibt's den Anfangsbuchstaben, sonst nicht.

    Gruesse,

    Bio

    --
    Ich bin ein Mobber - mein Posting tut mir leid! EHRLICH!!!
    sh:( fo:) ch:] rl:} br:> n4:& ie:{ mo:) va:) de:] zu:) fl:( ss:) ls:]
  2. Hallo TIMO,

    Allerdings werden dann auch doppelte Anfangsbuchstaben angezeigt, dass soll nicht sein. Wenn z.B. die Namen Meier, Müller, Milster in der DB stehen, soll nur einmal "M" ausgegeben werden.

    dir dürfte DISTINCT helfen ->http://www.mysql.de/doc/de/Selecting_columns.html (3. Beispiel)

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. hi TIMO!

    am wenigsten arbeit macht es wohl, wenn du jetzt dein script noch ein kleinwenig abaenderst.

    $letzterBuchstabe="";
    while($row=mysql_fetch_array($result1)){
     $aktuellerBuchstabe=substr($row["lname"],0,1);
     if($letzterBuchstabe!=$aktuellerBuchstabe){
      echo $aktuellerBuchstabe." - ";
      $letzterBuchstabe=$aktuellerBuchstabe;
     }
    }

    prost
    seth

    1. hi!

      ohh, ich ziehe alles zurueck. wusste nicht, dass es in mysql so tolle viele string-funktionen (http://www.mysql.com/doc/de/String_functions.html)gibt:
      brauchst im php-code nix zu aendern. aendere nur die sqlabfrage wie folgt ab:

      SELECT   distinct LEFT(lname, 1)
      FROM     members
      ORDER BY lname

      prost
      seth

  4. Hey,

    Probier das doch am besten mal gleich mit SQL:

    mysql_query("
       SELECT  SUBSTRING(lname, 1, 1) AS anfang
          FROM members
          GROUP BY anfang
    ");

    Mit ORDER BY (zusätzlich zu GROUP BY), könntest du dann noch sortieren...

    MsF,
    milky

    --
    This message is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Mailing List for more details.