Zusammenhängende DS abfragen

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

  • Zusammenhängende DS abfragen

    Hallo, ich habe ein für mich relativ komplexes Problem, für dessen Lösung ich bislang nicht einmal einen Ansatz gefunden habe.

    Folgende Tabellen-Struktur:

    Code:
    ID  -  posx  -  posy  -  status  -  gruppe
    ----------------------------------------------
    1  -  A  -  1  -  0  -  X
    2  -  A  -  2  -  1  -  X
    3  -  A  -  3  -  0  -  X
    4  -  A  -  4  -  0  -  X
    5  -  A  -  5  -  0  -  Y
    6  -  B  -  1  -  0  -  Y
    7  -  B  -  2  -  1  -  Y
    usw.
    posx und posy stellen mehr oder weniger die Position eines Elementes innerhalb eines Rasters dar. Es hat praktisch wie eine Tabelle Spalten und Zeilen.

    Man kann sich das so vorstellen, wie die Kinoplätze in einem Kinosaal. posx wäre hierbei die Sitzreihe und posy der Sitz in dieser Reihe.

    status sagt aus, ob diese Position definiert ist oder nicht (Kino: Platz besetzt oder frei).

    Das Problem besteht nun darin, alle IDs auszugeben, die in einer bestimmten Anzahl zusammenhängend im Raster und nicht definiert sind, oder besser gesagt Gruppen ausgeben, auf die dieser Zustand zutrifft. Im Kino wäre das z. B. so:

    Zeige mir alle Kinosäle (gruppen), die min. 5 zusammenhängende freie Plätze (posy) in einer Reihe (posx) haben.

    Im Raster wäre das dann z. B. so:

    Code:
    Gruppe 1:
    
       A | B | C | D | E | F | G | H
    1  0   0   0   0   1   0   0   0
    2  1   0   0   1   1   1   0   0
    3  1   0   1   0   0   0   0   0 
    4  1   0   0   1   0   1   0   1 
    
    Gruppe 2:
    
       A | B | C | D | E | F | G | H
    1  0   1   0   1   1   0   0   1
    2  1   0   0   1   1   1   0   0
    3  1   0   1   0   1   0   1   0 
    4  1   0   0   1   0   1   0   1
    Die Abfrage müsste also als Ergebnis lediglich die Gruppe 1 ausgeben, da sich nur in dieser Gruppe 5 zusammenhängende "Kinositze" befinden, die noch frei sind (3D bis 3H).

    Ich weiß nicht sicher, ob das wirklich verständlich ist, was ich meine. Aber ich hoffe, jemand versteht es und kann mir helfen.

    Vielen Dank,

    DasD

    Anhang: Natürlich kann posx ebenfalls nummerisch sein, falls das die Sache vereinfacht.
    Zuletzt geändert von DasD; 19.04.2005, 11:46.

  • #2
    Hallo,
    also eine Möglichkeit, die mir spontan einfällt, die ich abe nicht genau weitergedacht habe, wäre in zwei do-while-schleifen die sql-query einzubauen, die dann die summe über die gegebene anzahl von positionen macht. diese muss dann null sein um eine gruppe auszugeben. dazu wäre die zweite position als nummer schon einfacher
    also:

    PHP-Code:
    while (!(keine gruppen /*also Kinosäle*/ mehr vorhanden))
    do{
       while (
    kinoreihe/*also posx*/==x/*1-26*/)
       do {
       
    //SQL-Query Beginn
       
    Gib die Reihe und die Gruppe ausbei die Summe der die gezählten Werte /*also Sitze bzw. posy*/
       
    in der Tabelle von 0 bis a /*übergebene Variable aka. Anzahl der Sitze die frei sein sollen*/ 0 ist
       
    //SQL-Query Ende
       
    }

    dazu^^ musst du in einer vorigen abfrage aber die anzahl der gruppen und evtl. reihen überprüfen, ob das direkt im while auch funktionieren würde weiss ich nicht, aber auf jeden fall einfacher, wenn du es als funktion bildest.

    einfach wird das wahrscheinlich zu lösen sein, in dem das nicht per query sondern der programmierung und array gemacht wird.

    Kommentar

    Lädt...
    X