Frage wegen SQL-Query

Mordor

Registered User
Hallo zusammen
Ich habe eine Tabelle mit einigen Einträgen. Jeder Eintrag wird eindeutig über seine id abgefragt und nach den Titeln geordnet.

Beispieltabelle:

| id | title |
| 1 | item1|
| 2 | item2 |
| 3 | item3 |
| 4 | item4 |
usw.

Ich möchte jetzt eine Abfrage erstellen, die mir drei Einträge liefert:
Zum einen den Eintrag auf welche id sich in dem Query berufen wird, zum anderen den Datensatz eins über dem mit der id, und den Datensatz eins drunter. Ist das möglich, und wenn ja wie?

Gruß Mordor
 
SELECT id, title FROM Beispieltabelle WHERE id = "$id-1" LIMIT 0,3

Sofern die ID Spalte fortlaufend ohne Luecken ist, sollte dies funktionieren.
 
Das ist eben das Problem: In der Tabelle wird gelöscht und neu angelegt. Ausserdem sind die Datensätze immer wieder anders sortiert, dass sie zu ategorien gehören. Es werden also nicht bei jedem Query alle abgefragt.
 
sserdem sind die Datensätze immer wieder anders sortiert, dass sie zu ategorien gehören
Eine dritte Spalte namens "category" waere dann nicht verkehrt statt die ID's zu manipulieren ;)

In der Tabelle wird gelöscht und neu angelegt.
Folgendes Query liefert immer 3 aufeinanderfolgende ID's, ob sie jetzt direkt hintereinander liegen (2,3,4) oder weit auseinander (3,26,101):
PHP:
mysqli_query($DB,"SELECT `id`, `title` FROM `Beispieltabelle` WHERE `id` >= ".($id-1)." LIMIT 3");
NB: Die escape-Backticks nicht vergessen um Probleme und "seltsames"* Benehmen zu vermeiden ;)
 
...
Folgendes Query liefert immer 3 aufeinanderfolgende ID's, ob sie jetzt direkt hintereinander liegen (2,3,4) oder weit auseinander (3,26,101):
PHP:
mysqli_query($DB,"SELECT `id`, `title` FROM `Beispieltabelle` WHERE `id` >= ".($id-1)." LIMIT 3");
...
Das liefert nur nicht das, was gewünscht ist...

PHP:
mysqli_query($DB,
  "SELECT `id`, `title` FROM `Beispieltabelle` 
  WHERE 
    `id` >= (SELECT `id` FROM `Beispieltabelle` WHERE `id` < ".$id." LIMIT 1)
  AND 
    `id` <= (SELECT `id` FROM `Beispieltabelle` WHERE `id` > ".$id." LIMIT 1) 
  ORDER BY `id`");
 
Ups, hatte einen Ueberlegungsfehler :)
Die Subquery-Version liesse sich komprimieren:
PHP:
mysqli_query($DB,"SELECT `id`,`title` FROM `tabelle` WHERE `id` >= (SELECT `id` FROM `tabelle` WHERE `id` < '".$id."' ORDER BY `id` DESC LIMIT 1) ORDER BY `id` ASC LIMIT 3");
 
Back
Top