Kuno: mysql: toleranz beim select?

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?

  1. Hallo

    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?

    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

    1. 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.

      1. 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

        --
        -------------------
        Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
      2. 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

        1. 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.