Blockweise Sortierung wie in Outlook...

resterampe

Mitglied
Mein Problem:
Ich würde gerne die Datendank auslesen und nach Buchstaben sortieren

Beispiel:
A
Anna
Anton
B
Bert
Bernd
C
....

der Code:
PHP:
    <table>
    <tr><td colspan="3"></td><td><b>Spitzname</b></td> <td><b>Anzeigename</b></td><td><b>E-Mail</b></td></tr>
    <?php
    $j = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","");
    foreach ($j as $i) {
        $query = "SELECT * FROM Kontakte WHERE Nachname LIKE '".$i."%' ORDER BY Nachname "; 
        while ($dsatz = mysql_fetch_assoc(mysql_query($query))) {
            echo "<tr><td colspan=\"3\"></td><td colspan=\"3\"><b>".$i."</b></td></tr>";
            echo "<tr><td><a href=\"?act=show&showid=".$dsatz['id']."\" title='anzeigen'><img src='kontakt/images/b_browse.png' alt='anzeigen' title='anzeigen' /></a></td><td><a href=\"?act=edit&editid=".$dsatz['id']."\" title='bearbeiten'><img src='kontakt/images/b_edit.png' alt='bearbeiten' title='bearbeiten' /></a></td><td><a href=\"?act=drop&dropid=".$dsatz['id']."\" title='l&ouml;schen'><img src='kontakt/images/b_drop.png' alt='l&ouml;schen' title='l&ouml;schen' /></a></td><td>".$dsatz['Spitzname']."</td><td>".$dsatz['Anzeigename']."</td><td>".$dsatz['email']."</td></tr>";
            }
        }
?>
    </table>

mein Ergebnis:
A
Anna
A
Anna
A
Anna
A
Anna

Wo liegt mein Fehler? Habe schon verschiedene Versionen ausprobiert, komme aber nie zu dem gewünschten Ergbnis.
 
Zuletzt bearbeitet:
PHP:
$sql = "SELECT * FROM Kontakte ORDER BY Nachname"
$result = mysql_query($sql);
$firstchar = Array();
while($row = mysql_fetch_assoc($result))
     { 
	 if(!in_array(substr(strtoupper($row['Nachname']),0,1),$firstchar))
	    {
		$firstchar[] = substr(strtoupper($row['Nachname']),0,1);
		}
	 }

und dann einfach mit:
PHP:
foreach($firstchar as $kay)
        {
		echo "<a href=\"#".$kay."\">$kay</a> | ";
		}	
		echo "<br><br>";
ausgeben

So sollte es gehen, hab allerdings schon ein paar bierchen getrunken... :)
 
Zuletzt bearbeitet:
Wenn ich Deine Funktion richtig deute, dann werden bei Dir alles Ersten Buchstaben in ein Array geschrieben und das array ausgegeben....

Ich hääte aber gerne eine Liste

wo und A alles ist was mit A anfängt und unter B alles was mit B anfängt....

alles in ein array einzulesen und dann zu sortieren wäre auch möglich, aber es muss doch auch anders gehen, oder?

(hab auch schon ein paar Bier :))
 
Okay also ich hab kein bier mehr, bin jetzt auf orange mit korn umgestiegen..
Ja geh auch bestimmt anders :)
Überprüf doch einfach mit prev() od. next() ob der erste buchstabe ein anderer ist als wie im aktuellen und lass es dann ausgeben...
 
Hallo!

Kleines simples Beispiel.....
PHP:
<table>
<?php
include("config.inc.php");
 
$link = mysql_connect($db_host,$db_user,$db_pass) or die ("<h2>Kann die Datenbank nicht erreichen!</h2>");
mysql_select_db($db_name, $link) or die ("<h2>Die Datenbank existiert nicht!</h2>"); 
 
$char = range('A', 'Z'); // Array erstellen.
 
$a = 0;
while($a <= 25) { // Schleife 26 mal durchlaufen ("A" bis "Z" = 26 Buchstaben).
 
    echo "<tr><td><b>".$char[$a]."</b></td></tr>";
 
    $result = mysql_query("SELECT * FROM `".$db_table."` WHERE `titel` LIKE '".$char[$a]."%'ORDER BY `titel`;");
 
    $b=0;
    while( $row = mysql_fetch_array($result) ) {
        echo "<tr><td>".$row['titel']."</td></tr>";
        $b++;
    }
$a++;
}
?>
</table>
Gruss Dr Dau
 
das Beispiel selbst gibt mir schon folgende Fehlermeldung aus....

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

hier ist nochmal mein Code:
PHP:
$query = "SELECT * FORM kontakt WHERE Nachname LIKE '".$i."%' ORDER BY Nachname";
$result = mysql_query($query);
while ( $row = mysql_fetch_array($result) ) { mach was }

nur einen Fehler finde ich nicht
 
Also wenn Du mein Beispiel meinst, vermute ich dass $i lediglich eine Zahl ist.
Wenn Du also keine Namen hast die mit Zahlen beginnen, kann es natürlich auch nicht funktionieren. ;)
Bei meinem Beispiel steht das $a als Zahl für die Indizes des Arrays $char..... also $char[0] (=A), $char[1] (=B), $char[2] (=C)..... usw.

Du brauchst bei meinem Beispiel nur die Zugangsdaten ($db_host, $db_user, $db_pass), den Datenbanknamen ($db_name), den Tabellennamen ($db_table) und den Spaltennamen (titel) anpassen und schon funktioniert das Beispiel auch bei Dir..... bei mir funktioniert es jedenfalls. ;)
Erst dann würde ich das Beispiel so erweitern dass auch die anderen Spalten angezeigt werden.

Übrigens ist Dein "" im Array von Deinem Eingangspost völliger Nonsens, denn so suchst Du auch nach % (also nach Nachnamen mit jedem beliebigen Zeichen beginnend), wodurch sich die Buchstaben A bis Z automatisch erübrigen würden. ;)
Da aber auch nicht zu erwarten ist dass ein Nachname mit einer Zahl oder gar einem Sonderzeichen beginnt, kann man sich die Tipperei auch sparen und das Array von PHP mittels range(Startwert, Endwert) generieren lassen.
 
ich hab er es jetzt nochmal gemacht,
es funktioniert jetzt, jedoch habe ich meinen Fehler immer noch nicht gefunden, aber egal wird irgendwo ein Komma oder so fehlen :)

Danke
Julian
 
Zurück