phpbar.de logo

Mailinglisten-Archive

[php] Ermittlung der Seite eines Eintrags (mySQL)

[php] Ermittlung der Seite eines Eintrags (mySQL)

Yannik Hampe yannik at cipher-code.de
Mon Jul 28 12:54:17 CEST 2008



Dennis Dohle wrote:
> Hi Liste,
> 
> Ich trage beispielsweise einen Kunden in der Datenbanktabelle "kunden" ein.
> Danach bekomme ich die ID der Zeile mit Hilfe von "mysql_insert_id()" und
> übergebe diese per Request an die nächste Seite, auf der die Liste aller
> Kunden dargestellt wird. Da die Liste nur 20 Kunden darstellt, möchte ich
> jetzt automatisch zur Seite springen, die den Kunden enthält.
> 
> Derzeit mache ich das über:
> 
> $counter = 0;
> $query = "SELECT id FROM kunden ORDER BY firma ASC;
> $result = mysql_query($query);
> while ($row = mysql_fetch_array($result)) 
> 	{
> 	$counter++; 
> 	if ($row["id"] == $_REQUEST["id"]) 
> 		{
> 		break;
> 		}
> 	}
> 
> $akt_page = ceil($counter/20);
> 
> 
> Hat hier vielleicht jemand einen eleganteren Lösungsansatz? 

Das ist vermutlich wirklich nicht gerade der Renner. Meines Wissen 
gibt's auch keine Funktion in mysql die die aktuelle Zeilennnummer 
einesr Abfarge liefert.
Mit Hilfe von COUNT sollte allerdings etwas möglich sein:
SELECT COUNT(*) FROM kunden WHERE firma > (SELECT firma FROM kunden 
WHERE id=?)
So solltest du herausfinden, der wievielte Datensatz ein Kunde ist und 
kannst die somit die Seite errechnen.
Wenn es allerdings Firmen gibt, die über mehrere Seiten gehen, dass ist 
das Ergebnis nicht mehr aussagekräftig. Dann müsstest du noch eine 
zweite Sortierspalte in deinen query einbauen und musst noche einen Weg 
finden, diese im where des counts einzubauen. Oder du fängst nochmal mit 
deiner Methode an wieder in die Gegenrichtung zu suchen, bis du den 
Kunde genau hast. Ob das dann schneller ist, musst du mal ausprobieren ^^.

> Bei großen Datenbanken mit vielleicht 500.000 Zeilen ist das nicht wirklich
> optimal, oder?
> 
> Viele Grüße,
> Dennis

Yannik

php::bar PHP Wiki   -   Listenarchive