[Funktion] Datenbank Abfrage mit Arrays

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

  • [Funktion] Datenbank Abfrage mit Arrays

    Hallo ich hab da ein problem, welches ich nicht lösen kann,vielleicht bekomme ich ja ratschläge,Tips, oder sogar die erhoffte Lösung :-)

    Schilderung:

    ich habe eine Tabelle Kategorien mit den Tabellensätzen:
    cat_id, parent_id,cat_name

    5 Hauptkategorien A,B,C,D,E
    diese haben die parent_id alle =0
    einige Hauptkategorien haben 2 unterkategorien und einige 3 unterkategorien

    die untekategorien haben jeweils einen nummerischen Wert:

    Bsp: Haupkategorie A hat die Parent_id=0 und kat_id=6
    die unterkategorie von A (a1,a2,a3) haben die parent_id wert=6 und die cat_id sind von a1=7 a2=8 a3=9
    -----------------------------------------------------------------------------------------
    ausserdem habe ich eine Tabelle artikel mit den sätzen:
    id / und kat

    in kat wird die cat_id des artikel gespeichert z.B ich stelle den Artikel in kategorie A --> in die unterkategorie a3 ein, somit ist kat=9
    ------------------------------------------------------------------------------------------

    jetzt habe ich eine suchoption wobei ich einen begriff eingebe und in allen kategorien suche.die funktion sucht zuerst in der tabelle artikel,die diesen suchbegriff beinhalten

    ich möchte nun per select abfrage/mit einer while schleife alle kategorie nummern und anzahl artikel in der jeweiligen kategorie in der tabelle artikel und kategorien abfragen

    doppelte kategorien sollen nur einmal ausgegeben werden wo bei gleiche kategieren zusammengezählt werden sollten wie z.B:

    wenn die kategorie 9 dreimal vorkommt sollte das ergebnis so aussehen
    9(3)
    -----------------------------------------------------------------------------------------
    jetzt möchte ich von den unterkategorien jeweils die parent_id ermitteln

    d.h ich müsste rückwärts gehen von der letzen unterkategorie anfangen und dann von diesen die parent_id ermitteln.dann erhalte ich die cat_id von der parent_id die darauffolgt.

    das problem ist nun dies: da einige haupkategorien 3 und einige 2 unterkategorien haben. wenn ich eine rückwärtsabfrage von hinten beginne und gelange ich nach 2 abfragen auf die hauptkategorie von den kategorien die 2 unterkategorien haben, die kategorien welche 3 unterkategorien haben,von denen ist der level bis zur hauptkategorie noch nicht erreicht, wenn ich dann eine weitere 3.abfrage stelle, verschwinden die kategorien, die 2 unterkategorien haben da nach der 2.abfrage der level bereits erreicht wurde für diese.

    hier mein code:
    //data1 letzte level3 der kats
    $resulta=mysql_query("SELECT DISTINCT a.kat,c.cat_name,c.cat_id,c.parent_id FROM artikel a,kategorien c where a.kat=c.cat_id and ( $qp1 ) group by kat") or die(mysql_error());
    while ($data1=mysql_fetch_array($resulta)) {

    //data2 level 2
    $resultb=mysql_query("SELECT cat_id,parent_id,cat_name FROM kategorien WHERE cat_id=$data1[kat] group by parent_id order by cat_name;")or die(mysql_error());
    while ($data2=mysql_fetch_array($resultb)) {

    //data3 level 1 // von den kategorien,die 2 unterkategorien haben,ist hier bereits die parent_id=0,somit wird der wert 0 an data4 weitergegeben,da es keine cat_id=0 gibt,werden diese kategorien nicht mehr angezeigt

    $resultc=mysql_query("SELECT cat_id,parent_id,cat_name FROM kategorien WHERE cat_id='$data2[parent_id]' group by parent_id ORDER BY cat_name;")or die(mysql_error());
    ($data3=mysql_fetch_array($resultc));

    //data4 level 0 //
    $resultd=mysql_query("SELECT cat_id,parent_id,cat_name FROM kategorien WHERE cat_id='$data3[parent_id]' group by parent_id ORDER BY cat_name;")or die(mysql_error());
    while ($data4=mysql_fetch_array($resultd)) {
    Zuletzt geändert von taicom; 22.05.2006, 04:32.

  • #2
    Bitte mal folgenden Link zu Gemüte führen und dein Post entsprechend anpassen.
    Aussserdem sehe ich hier eher eine MySql Problematik --> @ mods ggf verschieben...

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Hallo taicom
      Hab' mir jetzt nicht alles durchgelesen,
      aber im GROUP BY sollten alle Spalten stehen die auch im SELECT vorkommen.
      Sonst wird lediglich der erste Datensatz in der DB angezeigt,
      das gibt unvorhersehbare Resultate.

      Kommentar

      Lädt...
      X