Abfrage Mysql mit alphabetischer Einordnung

DreamCreator

Grünschnabel
Hallo zusammen,
ich hab folgendes Problem,vielleicht kann mir hier jemand helfen. Ich mache eine Abfrage an meine Datenbank in PHP und möchte dann alle Einträge alphabetisch ausgeben. Das is soweit kein Problem (select order by...), allerdings möchte ich eine Überschrift für die einzelnen Blöcke haben, die ich dann anspringen kann mit nem #Link.

Also Tabelle mit Links: (schon von Hand erstellt)

|A| B |C |D |E| F| G| H |I | J|.. u.s.w

Und dann eben die Ausgabe -->

A----------------------------
alle Einträge die mit a anfangen

B----------------------------
alle Einträge die mit a anfangen

C---------------------------
alle Einträge die mit a anfangen

Jemand nen Tipp oder ne Funktion die sowas macht? Brauche sowas oefter aber hab noch nichts gescheites gefunden :(
 
Zuletzt bearbeitet:
Wenn du es mit PHP lösen möchtest, dann musst du jedesmal alle Einträge auslesen und dann via substr() den ersten Buchstaben checken und nur wo der deiner Auswahl entspricht die Sachen anzeigen lassen.

Dein eigentliches Problem hat aber wenn dann nichts mit PHP sondern mit MySQL zu tun, also war ich mal so frei den Thread zu verschieben.
 
ganz easy

einfach auf den link wie folgt aufbauen:

seite.php?char=a (für A eben)

if(!isset($_GET['char'])){
$_GET['char']="a";
}

sql befehl:

SELECT * FROM tabelle WHERE Spalte like '".$_GET['char']."%' ORDER BY Spalte

greetz Nova
 
Tim Comanns will dir ja nicht zu nahe treten aber das ist absoluter schwachsinnn, sorry aber das kann man wie oben beschrieben viel leichter und performanter gestalten.

Greetz Nova
 
@ Nova:
Soweit ich dein Script soweit sehe gibt der aber dann auf der Seite nur die passenden Einträge zu allen Einträgen mit einem Buchstaben aus. Ich bräuchte allerdings etwas, was mir alle Einträge einordnet und ausgibt. Also, alle Einträge aus A -> Ausgabe, B -> Ausgabe, C -> Ausgabe und das auf einer Seite :D


Danke erstmal. Soweit war ich leider schon :(
Allerdings ergibt sich dann sehr schnell ein Problem, wenn ich das ganze in einer einzigen Abfrage an die Datenbank realisieren möchte. Und nicht für jeden Buchstaben nen neuen Connect auf die Datenbank machen möchte.

Ich mach ne while Schleife an die Datenbank bis kein Datensatz mehr vorhanden ist.
Zwischendrin frage ich alles ab mit

PHP:
$buchstabe = $substr($row[2],0,1);

if ($buchstabe == $AlphabetArray[$counter_inc])....
{echo (....) }
else 
{$AlphabetArray[$counter_inc]++;....
}
.

Da hab ich allerdings dann mein Problem wie oben beschrieben, dass ich das mit den Überschriften nicht gebacken bekomme. Hab schon mit flags usw probiert, aber raffs einfach nid :(
 
Zuletzt bearbeitet:
@TheNova: Ich glaube wir haben uns ein wenig misverstanden ;)

Also dein Query mit like fällt meiner Meinung nach irgendwie eher in die Kategorie MySQL und nicht reines PHP, da ein alternatives Query vorgeschlagen wird :)
Mir ist schon klar, dass es performanter geht, als alles auszulesen und dann den ersten Buchstaben zu Filtern, allerdings musste ich ja irgendwie das verschieben des Threads rechtfertigen.

Ich hoffe damit ist das aus der Welt ?

btw: man kann Posts editieren ;)
 
Hi!

Kann leider kein PHP, aber wenn Du per
SELECT *,LEFT(UCASE(spalte),1) AS start_char FROM datenbank ORDER BY spalte
die Daten plus Anfangsbuchstaben und dann in der Schleife bei wechselndem Anfangsbuchstaben ein "Titel" schreibst:

$actual_char = "";
while (daten von mysql) {
if ($actual_char != $start_char[von-der-db]) {
echo "Links mit $start_char + <A NAME=$start_char>";
$actual_char = $start_char;
}
echo "link...";
}

,dann sollte die Links doch "eingeordnet" sein.

Mit
SELECT LEFT(UCASE(spalte),1) AS start_char FROM datenbank GROUP BY LEFT(UCASE(spalte),1) ORDER BY spalte
bekommst Du die verfügbaren Anfangsbuchstaben:
while (daten von mysql) {
echo "<A HREF="#$start_char[von der db]">$start_char[von der db]</A>";
}

Sorry für den ekligen Code :rolleyes:
 
@ Moderator + Nova
Mir isses ja ziemlich gleich wo mein Thread liegt, nur weiter komm ich mit Eurer Diskussion hier im Thread nid *gg* :)
 
Nochmal ne Ergänzung, vielleicht hilft das weiter mein Problem zu verstehen. Bin vielleicht nicht präzise genug. :(

----------------- Code------------------------
PHP:
<?php

//
//Variablen Definieren
//
$Ueberschrift=true;
$counter = -1;
$Alpha_array=array["A","B","C"....];

//
///Datenbankabfrage bis keine Datensätze mehr vorhanden
//
while(Datenbankabfrage) {

if ($Ueberschrift == true)
{
$counter++;
echo "Buchstabe:". $alpha_array[$counter];
$Ueberschrift = false;
}

if($ersterbuchstabe_aus_daten == $alpha_array[$counter])
{
echo $Datensatz;
}

else
{
$Ueberschrift= true;
}

}
?>
Wo liegt bei der Denkweise dann der Fehler :( Hier fehlt mir dann immer der erste Datensatz gleich nach dem ersten Durchlauf. Auch bringt der Code noch Probleme mit sich, sobald nach einer Überschrift keine Daten danach kommen :(
 
hmm warum so kompliziert wenn es einfach geht?

PHP:
$zeichen = " ";

$erg = mysql_query("select dbeintrag from dbtabelle order by dbeintrag");
while ($row = mysql_fetch_array($erg)) {
 if ($row['dbeintrag'][0] != $zeichen) {
   $zeichen = $row['dbeintrag'][0];
   echo "Buchstabe: $zeichen<br>";
 }
 echo "Datensatz : ".$row['dbeintrag']."<br>";
}
 

Neue Beiträge

Zurück