Samy: (mysql) die richtgen Bedingungen in meiner Abfrage..

Beitrag lesen

Hallo,

mein Anliegen: die richtige SELECT.. WHERE ... - Formel zu folgender Situation..

Ich habe 2 Tabellen, die erste "c0" beinhaltet u.a. die Spalten:

ID  | title | desc ...

wobei hier jetzt allerdings nur die ID eine Rolle spielt.
Die zweite Tabelle "c1" (woraus ich nur gewisse Einträge haben will, was aber nicht 100% so klappt wie es soll) beinhaltet u.a. die Spalten:

c0_ID | ID | ID_parent | title | desc ...usw.

Erklärung (der relevanten Spalten):

"c0" & "c1":

ID = bei beiden der PRIMARY KEY.. (auto increment)
       wird beim Einfügen eines Eintrags
       jeweils halt automatisch angelegt ..

"c1":

c0_ID = die ID der der übergeordneten Kategorie in "c0"

ID = wie bei "c0"

ID_parent = die ID der übergeordneten Kategorie in der selben
              Tabelle, also hier "c1" ...wenn keine übergeordnete
              existiert, dann ist der Wert "0" (nicht NULL),
              wenn eine existiert, dann eben die ID dieser

Beispieleinträge in den beiden Tabellen:

c0:
 ID | title     | desc
 --------------------------
 1  | Computer  | bla bla..
 3  | Einkaufen | blah...
 6  | Kultur    | ...
 etc.

c1:

c0_ID | ID | ID_parent | title          | desc..
 -----------------------------------------------------
 1     | 1  | 0         | Software       | blahhh...
 3     | 5  | 0         | Shops          | NULL
 1     | 4  | 0         | Programmierung | NULL
 6     | 3  | 0         | Museen         | ...
 1     | 7  | 4         | PHP            | ..
 6     | 10 | 3         | Deutschland    |
 1     | 17 | 4         | Perl

etc...

Ein Skript bekommt nun etwas in der Form "1:17:4" als Parameter, wobei
das quasi wie in der Tabelle "c1" zusehen ist, ist der zweite Wert "0",
so wird nur die Kategorie aus der Tabelle "c0" ausgegeben, ansonsten soll
eben die Hauptkategorie aus "c0" und dann je nach dem die Unterkategorie bzw.
deren Unterkategorien bis hin zu angeforderten Kateg. ausgeben werden.

Beispiel:  1:17:4

die einzelnen Werte sind in einem Array "$cpos" in der angezeigten Reihenfolge..

Ausgabe sollte sein:
     Computer - Programmierung - Perl

Ausgabe ist:
     Computer - Software - Programmierung - Perl

..und "Programmierung" ist eben keine Unterkateg. von "Software", sondern
   eine eigene auf der selben Ebene wie "Programmierung"..sollte demnach eben
   NICHT angezeigt werden!

die fehlerhafte DB-Abfrage (hier in PHP aber die SQL-Query ist ja deshalb nicht anders als in z.b. Perl, und das ist ja wobei ich nciht ganz klar komme.. ):

$result = mysql_query("SELECT title FROM c1 ".
                         "WHERE c0\_ID = '".$cpos[0."' ".
                           "AND ID <= '".$cpos[2]."' ".
                           "AND ID\_parent != '".$cpos[1]."' ".
                         "ORDER BY ID ASC");

while($row = mysql_fetch_array($result)) {
    array_push($arr_tree,$row[0]);
    }

So, da das ermittelt nciht die letzte also Kategorie, quasi die eigentlich anhand "1:17:4" gefordert war mit einschliesst, hol ich mir dir bereits schon vorher und tu sie hier zuletzt einfach an letzter Stelle dem Array "$arr_tree" hinzufügen..

Mir gehts nur um die richtige Abfrage... im endeffekt soll es quasi für die Abfrage keine Rolle spielen, ob da nun salopp gesagt 300 Unterkategorien oder garkeine sind. Darum auch nur 2 Tabellen, eine für die Haupt- u. d. andere für die Unterkategorien. Ich kann mir nicht vorstellen, das ich für jede Ebene eine eigene Tabelle anlegen muss, das muss doch irgendwie gehen...

nunja, das "AND ID <= ..."  Probleme geben würde irgendwann (was allerdings nicht das ganze Problem ist hier)
damit hab ich gerechnet, doch ich war nach 24 Stunden ewiger teilweise 15 verschiedener ANDs innerhalb der Abfrage ..einfach verzweifelt..

Hoffe, mir kann jemand helfen :-)

Danke schonmal.