Ankündigung

Einklappen
Keine Ankündigung bisher.

Andere Lösung für verschachtelte Mysql Anfrage

Einklappen

Neue Werbung 2019

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

  • Andere Lösung für verschachtelte Mysql Anfrage

    Hallo Forum !

    Ich habe eine Tabelle in mysql angelegt, wo ich Kategorien speichere für ein Dropdownmenü

    Beispiel

    ID Type Name
    1 0 Irgendwas1
    2 0 Irgendwas2
    3 1 Kategorie von Irgendwas1
    4 2 Kategorie von Irgendwas2

    Bei Type entspricht die '0' einer Hauptkategorie alles andere gehört zu den Unterkategorien also als Beispiel ID 1 ist eine Hauptkategorie und ID 3 ist eine Unterkategorie die der Hauptkategorie 1 zugeordnet ist.

    Als erstes lass ich mir die Hauptkategorien auslesen in einer while schleife und frage in der while Schleife die passenden Unterkategorien ausgeben

    Code:
    $Select = mysql_query (" SELECT ID,Name FROM Table WHERE Type = '0' ORDER BY NAME ASC");
    while ($Result = mysql_fetch_array ($Select))
    {
    echo "
    <td><a href='$Result[ID]'>Name der Hauptkategorie</td>
    $Selectsub = mysql_query (" SELECT ID,Name FROM Table WHERE Type = '$ID' ORDER BY NAME ASC");
    while ($Resultsub = mysql_fetch_array ($Selectsub))
          {
          echo "
          <td><a href='$Resultsub[ID]'>Name der Unterkategorie</td>
         }
    }
    Das klappt auch ohne Probleme, allerdings denke ich mal das es zu viele Resourcen kostet.Gibt es da noch eine andere Lösung ??

    Vielen Dank für eure Hilfe im vorraus

  • #2
    Nested Sets

    Kommentar


    • #3
      Hallo Goschy,

      erst mal ein "Herzliches Willkommen im Forum" von meiner Seite.

      Nun zu deinem Problem: Du scheints verschiedene Informationen aus zwei Spalten abzufragen, wobei es eine Schnittmenge der beiden gibt. Diese Tatsache ist ideal für das Anwenden von JOINs. Lies dir mal die Beschreibungen unter http://dev.mysql.com durch, dort findest du Anregungen. Kommt du nicht weiter, helfe ich dir gerne.

      Pseudocode:

      SELECT ... FROM ...
      [LEFT|OUTER|INNER] JOIN table1 ON ...
      WHERE ...


      EDIT: Solltest du tiefer verschachtelte Menüs mit einer Tiefe > 2 haben bietet sich Zerglings Lösung natürlich an.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design [B]before[/B] you start to write code!
      2. Discuss and review it together with [B]experts[/B]!
      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
      4. Write [I][B]clean and reusable[/B][/I] software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #4
        Hallo Zergling !

        Ich habe deinen Brocken aufgenommen und auch versucht es zu begreifen, das Grundprinzip ist mir klar und ich bin auch überzeugt das das sehr gut ist, allerdings ist es für mich persönlich zurzeit zu komplex um es umzusetzen.

        Danke für deine Antwort

        Gruß Goschy

        Kommentar


        • #5
          Hallo,
          dann nimm entweder eine fertige PHP-Klasse, die die Verwaltung der Kategorien für dich übernimmt oder du musst es eben doch mit deiner Verschachtelung lösen.

          Übrigens könntest du das ganze dann auch mit einer einzigen SQL-Abfrage lösen, in dem du einfach alle Menüpunkte selektierst und PHP die eigentliche Auswahl übernimmt.

          Kommentar


          • #6
            Hallo Zergling !

            Ich macht mir das aber schwer (warum sollte ich es auch leicht haben *grins*).

            Wie muss denn sowas aussehen als Klasse ? (Lese mich gerade durch Joins durch)

            Gruß Goschy

            Kommentar


            • #7
              Hallo Doc !

              Vielen Dank auch für deine Antwort und ich muss sagen das diese für mich wohl die sinnvollste darstellt (frisst meine Variante eiegntlich sehr viel performance ??), allerdings finde ich bisher nur join befehle über 2 Tabellen nicht für eine.

              Gruß Goschy

              Kommentar


              • #8
                Du kannst eine Tabelle auch mit sich selbst "Joinen" (Self-Join).

                Kommentar


                • #9
                  Hallo Pepe24 !

                  Das habe ich bereits rausgefunden allerdings formatiert er mir nicht die Daten so wie er soll.Er soll sie im Prinzip so schreiben:

                  Hauptkategorie1
                  Unterkategorie1.1
                  Unterkategorie1.2
                  Hauptkategorie2
                  Unterkategorie2.1

                  usw und das tut er halt nicht ich verzweifel bald.

                  Gruß Goschy

                  Kommentar

                  Lädt...
                  X