SQL-Query

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

  • SQL-Query

    Hallo

    Habe folgendes Problem:

    In meinem CMS habe ich Hauptkataloge und Unterkataloge;
    Die Titel diese Kataloge werden in der Tabelle "katalog" gespeichert.
    In dieser Tabelle habe ich das Attribut katalog_id, das jeder Datensatz automatisch zugewiesen bekommt sowohl Hauptkataloge als auch Unterkataloge;
    Zusätzlich habe ich noch ein Attribut katalog_katalog_id, das bei den Unterkatalogen die katalog_id des jeweiligen Hauptkatalogs enthält (zur eindeutigen Zuordnung der Unterkataloge zu den Hauptkatalogen),
    Bei den Hauptkatalogen ist diese Attribut =0;
    Ich möchte in meiner Navigation alle Hauptkataloge angezeigt bekommen - und beim klicken auf die Hauptkataloge, die Unterkataloge enthalten möchte ich dass diese eingerückt angezeigt werden.
    Jetzt bin ich auf der Suche nach der passenden SQL-Abfrage mit der ich die Unterkategorien in Abhängigkeit von der Hauptkategorie selektieren kann.
    Dies habe ich schon probiert:

    SELECT * FROM katalog whére katalog_id = katalog_katalog_id ;

    Dies funktioniert nicht da er jeden Datensatz einzeln durchforstet;
    Gibt es in SQL einen Befehl, der von jedem Datensatz das Attribut katalog_id durchforstet und sie mit der katalog_katalog_id eines jeden Datensatzes vergleicht?
    Das ganze habe ich schon mit einer INNER JOIN Abfrage versucht (SELECT * FROM katalog INNER JOIN katalog ON katalog.katalog_id = katalog.katalog_id WHERE ...) Das funkt auch nicht da ich zweimal die gleiche Tabelle vergleiche;

    Könnt Ihr mir da helfen?
    knowledge is power - arm yourself

  • #2
    mit subselects geht's

    ohne subselects wirst du wohl zwei abfragen machen müssen: (select name,katalog_id from tabelle where katalog_katalog_id=0) und dann die gefundenen katalog_ids durchgehen.

    evtl. geht auch sowas:
    Code:
    SELECT * FROM katalog INNER JOIN katalog parent ON katalog.katalog_id = parent.katalog_id having having parent.katalog_katalog_id=0
    aber nagel mich nich drauf fest
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ganz klar ist mir allerdings nicht was an dem join falsch ist wenn Du einen Join machst dann bekommst Du doch alle kataloge ins Resultset...
      Du weisst welche Hauptkataloge sind und welche nicht...

      Das kannste dann programmseitig abfengen...
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        ...

        Vielen Dank für die hilfe;

        Habs mal mit der Inner Join probiert :
        SELECT * FROM katalog INNER JOIN katalog parent ON katalog.katalog_id = parent.katalog_id WHERE parent.katalog_katalog_id=parent.katalog_id
        hier gibt er mír keinen Datensatz aus - eignetlich müsste es doch so funzen oder?
        knowledge is power - arm yourself

        Kommentar


        • #5
          bei welchem datensatz sind denn katalog_id und katalog_katalog_id identisch?

          entweder du lässt dir alle zurückliefern und suchst in php (kannst ja die abfrage nach katalog_katalog_id srtieren, dann wird's nich so schwer)
          oder du suchst dir nur die hauptkategorien raus (katalog_katalog_id=0) und dann die Unterkategorien (katalog_id in (hier die ids der hauptkataloge durch komma getrennt) )
          oder nur die unterkategorien (katalog_katalog_id!=0)
          oder du machst die hauptkategorien als links mit der katalog_id als paameter und zeigst die unterkategorien nur bei nem klick auf den link an (katalog_id=der paramater im link)
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            ...

            Wie dein letzter Lösungsvorschlag ist es angedacht;
            Mein Problem ist, in der Datenbank gibt es keinen Datensatz bei dem sowohl katalog_id = katalog_katalog_id ist; Ist ja auch logisch denn eine Hauptkategorie kann nicht gleichzeitig ihre eigen Unterkategorie sein;
            Bei den unterkatalogen werden also nur der Wert der katalog_id des Hauptkatalogs in der katalog_katalog_id angegeben.

            Mit zwei Abfragen habe ich es auch schon probiert:


            PHP-Code:
            $result_katalog1 $obj_db->get_recordset("
                    SELECT katalog_id
                    FROM katalog 
                    
                    
                    "
            );

                
            $array_katalog1 mysql_fetch_array($result_katalog1);
                
                foreach(
            $array_katalog1 as $single_katalog_id_var){
                
            $result_katalog2 $obj_db->get_recordset("
                select * from katalog where katalog_katalog_id = '"
            .$single_katalog_id_var."' ");

            }

                while(
                
            $array_katalog2 mysql_fetch_array($result_katalog2))
                {
                echo 
            $array_katalog2[katalog_titel];} 
            da gibt er mir keinen Datensatz zurück;

            Wie funktioniert das eigentlich mit dem subselects?
            knowledge is power - arm yourself

            Kommentar


            • #7
              dein foreach is uberflüssing,weil du nur einmal mysql_fetch_array aufrufst, also nur eine katalog_id bekommst. probier mal folgendes:
              Code:
              select name katalog_id from katalog where katalog_katalog_id=0
              damit solltest du die hauptkategorien kriegen, die du mit ner while-schleife (so wie du's für die unterkategorien gemacht hast durchgehst

              jetzt machst du nen link in der art
              Code:
              <a href="index.php?showcat=<katalog_id>">name</a>
              und liest dann nur die einträge einer hauptkategorie aus
              Code:
              select * from katalog where katalog_katalog_id=$showcat
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar

              Lädt...
              X