Announcement

Collapse
No announcement yet.

Denkfehler bei Join-Abfrage auf gleicher Tabelle?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Denkfehler bei Join-Abfrage auf gleicher Tabelle?

    Hallo liebe Entwickler.

    Ich grüble hier über einen Problem und sehe wahrschenlich den Wald vor lauter Bäumen nicht mehr.
    Ich habe eine Tabelle 'images' wie folgt:

    NUr die Spalten id, campaign_id und sort_id sind (für das Verständnis) relevant, hier eine kurze Erläuterung:
    1. Die Spalte id hat eine fortlaufende Nummerierung (im Screenshot andere Sortierung!)
    2. Die Spalte campaign_id gruppiert die Datensätze zu Gruppen.
    3. Die Spalte sort_id gibt die Sortierung innerhalb dieser Gruppe an (nicht fortlaufend, als auch Zahlenlücken möglich!)

    Ich möchte nun in einer Abfrage den Nachfolger eines Datensatzes innerhalb seiner Gruppe (campaign_id) ermitteln.
    Beispiel 1:
    Ich möchte den Nachfolger des Datensatzes mit der ID = 36 ermitteln.
    --> Ist in Gruppe campaign_id = 2, nächst höhere sort_id wäre der Datensatz mit der ID 34.
    Beispiel 2:
    Nachfolger des Datensatzes mit der ID = 67 ist der Datensatz ID = 70

    Ich hoffe das Prinzip konnte ich verständlich machen.
    Meine SQL Abfrage (für Beispiel 2) schaut dazu folgendermaßen aus:
    Code:
    SELECT i_f.id, i_f.campaign_id, i_f.sort_id, i_f.displayseconds, i_f.title, i_f.path, i_f.thumb_path, i_f.size_x, i_f.size_y, i_f.filesize
    FROM image as i_f
    JOIN image as i_c ON i_f.campaign_id = i_c.campaign_id
    WHERE i_f.sort_id > 'i_c.sort_id' AND i_c.id = 67
    ORDER BY i_f.sort_id ASC
    Das Ergebnis sollte nun alle "theoretischen" Nachfolger auflisten (also alle Datensätze mit der gleichen campaign_id wie Datensatz 67 und mit einer größeren sort_id). Dann wird das Ergebnis sortiert ausgegeben und ich Frage in der weiteren verarbeitung des Ergebnisses (nicht mehr SQL) den ersten Datensatz ab. Dieser entspricht dann dem nächsten Nachfolger.


    Leider spuckt mir diese Abfrage irgendwas aus, was ich leider im geringsten nicht nachfollziehen kann. Ich habe nun schon mit den JOIN Varianten und ausschlißelich WHERE-Klauseln rumgespielt. Wo liegt denn hier mein Denkfehler?

    Ich wäre über jeden Denkanstoß dankbar!!! Mein letztes Mittel wär eine Ermittlung über mehrere Abfragen was ich allerdings aus Performance-Sicht meiden will. Und auch einfach weil es besser geht.

  • #2
    Also ich hab jetzt Dein SQL Kommando nicht näher untersucht. So etwas sollte allerdings funktionieren:

    [highlight=sql]
    SELECT result.*
    FROM image source
    INNER JOIN image result ON source.campaign_id = result.campaign_id
    WHERE source.sort_id < result.sort_id AND source.id = 67
    ORDER BY result.sort_id
    [/highlight]

    Die Gänsefüßschen ('i_c.sort_id') unten sehen sehr seltsam aus.

    Comment


    • #3
      hey, vielen dank!

      irgendwie klar, aber da stand ich auf dem schlauch

      Comment


      • #4
        ja sowas kommt vor ; kenn ich auch von mir selber. Oft muss mans nur erklären und schon kommt man auf die Lösung.

        Comment

        Working...
        X