# Datenbank alphabetisch auslesen



## Urbanice (21. Oktober 2007)

Hi, ein bekannter hat mir vor einer weile ein script programmiert um rezepte aus einer datenbank alphabetisch auszulesen. Das hat lange auch gut geklappt doch nun fügt es jedes neue rezept am ende nur an und ordnet es nicht mehr nach dem alphabet. Ist vielleicht im script ne begrenzung an einträgen oder ähnliches, vielleicht könnt ihr mir helfen.


```
<?php
/*
 * Verbindungs und Config-Settings
 */
@$connect = mysql_connect("localhost","xxxxx","xxxxxx") or die ("<h1>Fehler, konnte nicht zur MySQL-Datenbank verbinden!</h1>");
@mysql_select_db("usr_web225_1");

$config["anzahl_pro_seite"] = 37;
$config["limit_start"] = (is_numeric($_GET["start"])) ? $_GET["start"] : 0;

$result = mysql_query("SELECT titel, link, datum FROM rezepte_archiv ORDER BY 'titel' ASC LIMIT ".$config["limit_start"].", ".$config["anzahl_pro_seite"]."", $connect);


echo "<table style=\"width:100%;\">\n";
echo "\t<tr>\n";
echo "\t\t<td><b><SMALL>Rezept</SMALL></b></td>\n";
echo "\t\t<td style=\"width:80px;\"><b><SMALL>Datum</SMALL></b></td>\n";
echo "\t<tr>\n";



while($row = mysql_fetch_object($result))
{
	echo "\t<tr>\n";
	echo "\t\t<td><SMALL><a href=\"http://www.koch-universum.de/index.php?content=".$row->link."\">".stripslashes($row->titel)."</SMALL></td>\n";
	echo "\t\t<td style=\"width:80px;\"><SMALL>".$row->datum."</SMALL></td>";
	echo "\t</tr>";
}

echo "</table>\n";

mysql_free_result($result);
unset($row);

$result = mysql_query("SELECT COUNT(id) AS anzahl FROM rezepte_archiv", $connect);
$row = mysql_fetch_object($result);

if ($row->anzahl > $config["anzahl_pro_seite"])
{
	echo "<p align=\"right\">Seite&nbsp;";
		
	$seitenzahl = 1;
	$seitenausgabe = 0;

	while ($row->anzahl >= $seitenausgabe)
	{
		if ($config["limit_start"] != $seitenausgabe)
		{
			$linkstart = "<a href=\"index.php?content=".$_GET["content"]."&amp;start=".$seitenausgabe."\">";
			$linkende = "</a>";
		}
		else
		{
			$linkstart = "";
			$linkende = "";
		}

		echo "[".$linkstart.$seitenzahl.$linkende."]&nbsp;";

		$seitenzahl++;
		$seitenausgabe += $config["anzahl_pro_seite"];
	}

	echo "</p>\n";
}

mysql_free_result($result);
unset($row);
?>
```


----------



## Kahmoon (22. Oktober 2007)

In welcher Reihenfolge sie in der Datenbank stehen ist vollkommen egal. Die Datenbankabfrage
	
	
	



```
ORDER BY 'titel' ASC
```
 sorgt für die Sortierung und die sieht eigentlich OK aus.

Sind die ausgegeben Einträge alle unsortiert?

Was passiert wenn Du 
	
	
	



```
$config["anzahl_pro_seite"] = 37;
```
 mal testhalber auf z.B. 100 setzt?


----------



## Urbanice (22. Oktober 2007)

Ja ok das hab ich probiert, daran liegts leider nicht. Jetzt hab ich aber festgestellt dass das ganze auf einmal nach datum sortiert wird.

Die ersten naja etwa 80 Einträge sind sortiert weil ich die auch schon anfangs alphabetisch eingetragen habe, der rest wurde jetz nur hintenran gehängt und und ist vom datum her immer aufsteigend. 

kann das auch an einer falschen eingabe in der datenbank selbst liegen?


----------



## Kahmoon (22. Oktober 2007)

Hmm strange...die einzige Abfrage die etwas wiedergibt enthält eine Sortierung nach "titel".


```
mysql_query("SELECT titel, link, datum FROM rezepte_archiv ORDER BY 'titel' ASC LIMIT ".$config["limit_start"].", ".$config["anzahl_pro_seite"]."", $connect);
```

 Wenn im Titel also keine Zahlen am Anfang stehen sollte er auch danach sortieren.


----------



## Dr Dau (24. Oktober 2007)

Hallo!


Kahmoon hat gesagt.:


> Hmm strange...die einzige Abfrage die etwas wiedergibt enthält eine Sortierung nach "titel".


Irrtum!
'titel' ist kein Spaltenname sondern ein String (mysql_error() sollte hier eigentlich meckern).
Daher wird nicht nach titel sortiert, sondern nach der ersten Spalte (vermutlich der ID).
Da das Datum vermutlich immer das aktuelle Datum vom Tag des Eintrags ist, sieht es nur so aus als wenn nach dem Datum sortiert werden würde.

Lange Rede, kurzer Sinn: Spaltennamen gehören in ``.
	
	
	



```
ORDER BY `titel`
```
Kleinvieh macht halt auch Mist. 
Ich würde aber auch die Spaltennamen die per SELECT ausgewählt werden, in `` setzen (man weiss ja nie  ).

Gruss Dr Dau


----------



## Kahmoon (24. Oktober 2007)

In diesem Fall sollte 
	
	
	



```
ORDER BY titel
```
 genauso gehen. Bei mir in der Testumgebung tuts das auf jeden Fall mit beiden Schreibweisen. Ohne `` muss man halt darauf achten keine SQL Schlüsselwörter wie "user, mod etc." zu treffen. Sicherer ist es mit.


----------

