35 Stimmen

MySQL: Suchergebnisse auf mehreren Seiten darstellen

Tutorial von Stefan Trost | Letztes Update am 01.05.2021 | Erstellt am 30.04.2012

In diesemTutorial möchten wir uns anschauen, wie man das Suchergebnis einer MySQL Abfrage auf mehreren Seiten darstellen kann, so wie zum Beispiel auch die Ergebnisse von Suchmaschinen auf mehreren Seiten dargestellt werden.

Zunächst betrachten wir unsere normale MySQL-Abfrage:

SELECT spalte FROM tabelle WHERE spalte LIKE '%abc%'

Als Beispiel möchten wir alle Datensätze auswählen, wo in der Spalte "spalte" die Zeichenkette "abc" vorkommt. Führen wir die Anfrage so durch, bekommen wir unter Umständen 1000 Treffer, die dann alle auf unserer ersten Seite mit den Ergebnissen dargestellt werden müssen. Da sich die meisten Nutzer sowieso nur für die ersten Treffer interessieren wären, haben wir hier unnötig die Datenbank strapaziert und eine unnötig lange Ladezeit provoziert.

Wir möchten nur 10 Treffer pro Seite anzeigen. Dazu können wir zunächst eine LIMIT-Klausel einführen:

SELECT spalte FROM tabelle WHERE spalte LIKE '%abc' LIMIT 10

Diese Abfrage wird uns nur die ersten 10 Treffer aus der Datenbank holen und damit die Ladezeiten verringern. Für unsere erste Seite würde das funktionieren. Aber für die zweite Seite brauchen wir die Treffer 11 bis 20.

Dazu lässt sich die Abfrage wie folgt umschreiben:

SELECT spalte FROM tabelle WHERE spalte LIKE '%abc%' LIMIT 0,10;
SELECT spalte FROM tabelle WHERE spalte LIKE '%abc%' LIMIT 10,10;
SELECT spalte FROM tabelle WHERE spalte LIKE '%abc%' LIMIT 20,10;

Dies sind die Abfragen für unsere ersten drei Seiten für die Suchergebnisse. Die erste Zahl nach dem LIMIT gibt an, bei welchem Datensatz wird beginnen wollen, die zweite wie viele Datensätze wir auswählen möchten.

LIMIT 20,10 hieße demnach, dass wir die ersten 20 Datensätze überspringen und schließlich dann ab dem 20ten Datensatz 10 Datensätze ausgeben. Dieser Vorgang ist übrigens um einiges besser als zunächst die ersten 30 Datensätze auszuwählen und schließlich per PHP nur die letzten 10 Datensätze anzuzeigen.

Für unser Skript zum Anzeigen der Datensätze würden wir natürlich nicht für jeden Seite eine einzelne Abfrage schreiben, sondern Variablen verwenden:

$start = $seite * 10;
$anfrage = "SELECT spalte FROM tabelle LIMIT $start,10"

In der Variable $seite ist unsere aktuelle Suchseite gespeichert. Diese sollte entsprechend über GET oder POST übertragen werden (Vorsicht hier vor Code Injections). Um den Startpunkt der Suchanfrage zu definieren, nehmen wir dann einfach unsere Seite mit 10 mal (für unsere 10 Treffer pro Seite) und fügen $start in die Suchanfrage mit ein.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

PHP: Zeit und Performance messen

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.