[MySQL] erste fehlende Zahl in abhängigkeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL] erste fehlende Zahl in abhängigkeit

    Guten Abend zusammen,

    ich steh irgendwie aufm Schlauch. Ich brauch die erste Freie/fehlende Zahl des Zählers in abhängigkeit vom Paket.

    Meine Tabelle sieht wie folgt aus:
    (id = auto_increment, MySQL 5)

    id - paket - zähler

    [COLOR=crimson]1 - - - 1 - - - 1[/COLOR]
    [COLOR=crimson]2 - - - 1 - - - 2[/COLOR]
    3 - - - 2 - - - 1
    4 - - - 2 - - - 3
    5 - - - 2 - - - 4
    [COLOR=crimson]6 - - - 1 - - - 3[/COLOR]
    [COLOR=crimson]7 - - - 1 - - - 4[/COLOR]
    [COLOR=crimson]9 - - - 1 - - - 6[/COLOR]

    Als Ausgabe bräuchte ich nun (einen Array) in dem folgendes gespeichert ist:

    2 => 2
    [COLOR=crimson]1 => 5[/COLOR]

    (paket => Zahl)

    Weil ja das die ersten fehlenden Zahlen der jeweiligen Pakete sind.

    PS: Pakete und Zähler sind nur Zahlen, die Namen hab ich in ner andern Tabelle stehen.


    Wäre echt dankbar wenn mir hier einer helfen könnte

    Danke schon mal

    Liebe Grüße, Dani
    Zuletzt geändert von Daniela; 15.02.2006, 18:28.

  • #2
    Schritt 1 (Ermitteln aller Datensätze, die kein Gegenstück mit Zähler + 1 haben):
    Code:
    SELECT a.paket, a.zaehler
      FROM tabelle a
      LEFT JOIN tabelle b
        ON a.paket = b.paket
       AND a.zaehler + 1 = b.zaehler
     WHERE b.zaehler IS NULL
    Schritt 2 (Sollte mit MySQL5 gehen):
    Code:
    SELECT t.paket, MIN(zaehler)
      FROM (SELECT a.paket, a.zaehler + 1 zaehler
      FROM tabelle a
      LEFT JOIN tabelle b
        ON a.paket = b.paket
       AND a.zaehler + 1 = b.zaehler
     WHERE b.zaehler IS NULL) t
     GROUP BY t.paket
    Sorry ... meine ae's musst Du noch gegen Umlaute tauschen ... i.e.: zaehler => `zähler` ...
    Zuletzt geändert von goth; 15.02.2006, 00:44.
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Hallo goth,

      also erstmal recht herzlichen dank!!!

      Dein Beispiel war sehr interessant und hat mir richtig weitergeholfen

      Ich hatte nur das Problem, das mir mit SELECT t.paket, MIN(zaehler) der $row['zaehler'] nicht ausgegeben wurde.

      Diese Kleinigkeit konnte ich aber mit SELECT ... MIN(zaehler) AS zaehler lösen. ( Falls jemand das hier nachmacht und ähnliche Probs hat )

      PS: Schritt 2 funktionierte unter MySQL Version 4.1 (oder wars 4.0 ?) nicht. Bei 5.0.7 gings einwandfrei, komisch irgendwie, da die Befehle ja laut Manuel auch unter 4 gehen müssten. Schritt 1 geht in beiden Versionen.

      Ansonsten nochmal vielen Dank für die schnelle Hilfe !!

      Lg, Dani

      Kommentar


      • #4
        Original geschrieben von Daniela
        PS: Schritt 2 funktionierte unter MySQL Version 4.1 (oder wars 4.0 ?) nicht. Bei 5.0.7 gings einwandfrei, komisch irgendwie, da die Befehle ja laut Manuel auch unter 4 gehen müssten. Schritt 1 geht in beiden Versionen.
        Das ist korrekt ... subqueries (auch derived) werden seit Version 4.1 unterstützt ... mein hinweis galt auch nur dem Umstand das es mit Deiner Version auf jeden Fall funktionieren sollte ... in MySQL5 könnte man sich im übrigen auch überlegen einen entsprechenden VIEW zu generieren (Zumindest für die Unterfrage) ... sollte im allgemeinen etwas schneller sein, allerdings ist's eben einfach die Frage wie häufig diese Abfrage vorkommt.
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Da die Abfrage nicht so oft vorkommt, lass ich es mal so.
          (Nichts desto trotz schau ich mir aber das mit VIEW auch nochmal an. )

          Vielen dank nochmal für deine Hilfe

          Kommentar

          Lädt...
          X