mysql: toleranz beim select?
Kuno
- datenbank
Angenommen ich habe folgende Tabelle:
id|kunde
1 otto
2 karl
3 oskar
4 heinz
5 peter
6 andreas
Nun möchte ich einen Datensatz ausgeben PLUS den davor und den danach.
Wenn ich also Datensatz 3 haben möchte, dann möchte ich folgendes ergebnis haben:
2 karl
3 oskar (wurde gesucht)
4 heinz
geht sowas mit mysql?
Hallo
id|kunde
1 otto
2 karl
3 oskar
4 heinz
5 peter
6 andreasNun möchte ich einen Datensatz ausgeben PLUS den davor und den danach.
Wenn ich also Datensatz 3 haben möchte, dann möchte ich folgendes ergebnis haben:
2 karl
3 oskar (wurde gesucht)
4 heinzgeht sowas mit mysql?
Wenn Du das Kriterium kennst, mit dem Du den vorhergehenden und nachfolgenden Datensatz identifizieren kannst, dann das sollte jeder SQL-Dialekt unterstützen, in Deinem Beispiel ist es trivial:
SELECT
id,
kunde
FROM tabelle
WHERE id [link:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_between@title=BETWEEN] 2 AND 4
In anderen Fällen könnten Subselects (MySQL kann dies ab Version 4.1) dazu dienen, die angrenzenden Datensätze zu finden; es sollte auch mittels UNION und LIMIT gehen.
Was hat das Problem mit Toleranz zu tun?
Freundliche Grüße
Vinzenz
Was soll ich denn mit BETWEEN wenn 2 und 4 unbekannt sind?
nochmal extra für dich:
ich suche die nächst höhere ID und die vorherige ID von einer Bekannten.
Hello,
ich suche die nächst höhere ID und die vorherige ID von einer Bekannten.
SELECT MIN(id) FROM table WHERE id > $id
SELECT MAX(id) FROM table WHERE id < $id
Das ist deine Ausgangslage - jetzt bist du dran, entweder 3 Abfragen zu machen oder alles, wie Vinzenz schon vorschlus, per UNION zu vereinen.
MfG
Rouven
Hallo
Was soll ich denn mit BETWEEN wenn 2 und 4 unbekannt sind?
nochmal extra für dich:
ich suche die nächst höhere ID und die vorherige ID von einer Bekannten.
extra nochmals für Dich:
In anderen Fällen könnten Subselects (MySQL kann dies ab Version 4.1)
dazu dienen, die angrenzenden Datensätze zu finden; es sollte auch
mittels UNION und LIMIT gehen.
Ich hatte den Hinweis vergessen, dass MySQL UNION erst ab Version 4.0 kennt.
Meine Query kannst Du wunderbar mit Subselects nutzen, für die Werte setze
die Queries von Rouven ein. Wo ist nun genau
Dein Verständnisproblem?
Freundliche Grüße
Vinzenz
Vermutlich geht der nicht mit dem Kriterium "Id" auf die Tabelle, sondern bspw. über den Namen, darum ist dem Fragesteller der Wert der "Id" erst einmal unbekannt.
Man könnte da jetzt mit irgendwelchen SubSELECTs und dem IN-Operator "einen machen", aber es wäre wohl einfacher erst einmal mit drei Abfragen die "Id"s zu holen und dann in einer vierten Abfrage bei nun entsprechend gefüllter WHERE-Klausel die 0-3 Datensätze.
Übrigens täte mich die Sinnhaftigkeit des Vorhabens interessieren.