[SQL allgemein] Nested Sets Problem: Level

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

  • [SQL allgemein] Nested Sets Problem: Level

    Hi

    Ist wahrscheinlich ganz einfach, da noch keiner damit Probleme hatte, aber irgendwie funzt das nicht so ganz.

    Query aus dem Tutorial etwas an meine Tabelle abgeändert. Kaum verändere ich die Group By-Klausel (an meine Spaltennamen) funzt nix mehr.

    Wofür steht das große LFT ?? wenn ichs klein mache macht er das, was ich eh erwartet hätte. Wenn ichs lasse und meine Spaltennamen ändere gibts nen Fehler. Wenn ich meine SPaltennamen groß schreibe gehts nicht.

    Geht das nur mit dem Spaltennamen LFT ???

    also habe

    Code:
    SELECT node1.payload,
             COUNT(*) AS level
    
        FROM node AS node1,
             node AS node2
     
       WHERE node1.root_id = 1
         AND node2.root_id = 1
    
         AND node1.lft BETWEEN node2.lft AND node2.rgt
    
    GROUP BY node1.LFT;
    in

    Code:
    SELECT node1.payload,
             COUNT(*) AS level
    
        FROM nstest AS node1,
             nstest AS node2
     
       WHERE node1.root_id = 1
         AND node2.root_id = 1
    
         AND node1.left_id BETWEEN left_id AND right_id
    
    GROUP BY node1.left_id;
    geändert. finde in dem komischen MySQL Handbuch leider nix dazu, weil ich nicht nach .lft suchen kann bzw. er nix findet.

    Wäre nett, wenn mir das jemand erklären könnte. Das Tut tuts ja leider nicht, sondern sagt einfach, das ist so.

    Gruß Hatachy

  • #2
    Re: [SQL allgemein] Nested Sets Problem: Level

    Original geschrieben von Hatachy
    Wenn ichs lasse und meine Spaltennamen ändere gibts nen Fehler
    der da wäre?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ich seh nur dass nach dem BETWEEN nur noch die felder schreibst, nicht mehr node1.left_id / node1.right_id
      mfg,
      [color=#0080c0]Coragon[/color]

      Kommentar


      • #4
        sorry,

        Invalid Sql: "SELECT node1.payload, COUNT(*) AS level FROM chq_nstest AS node1, chq_nstest AS node2 WHERE node1.root_id = 1 AND node2.root_id = 1 AND node1.left_id BETWEEN node2.left_id AND node2.right_id GROUP BY node1.LFT;" [Unknown column 'node1.LFT' in 'group statement']

        PS, das node1 hatte ich davor

        wahrscheinlich steh ich nur voll aufm schlauch
        Zuletzt geändert von Hatachy; 12.07.2004, 19:44.

        Kommentar


        • #5
          Original geschrieben von Hatachy
          GROUP BY node1.left_id
          Original geschrieben von Hatachy
          GROUP BY node1.LFT
          entscheide dich doch mal, wie heißt die spalte denn jetzt?
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Re: Re: [SQL allgemein] Nested Sets Problem: Level

            Original geschrieben von mrhappiness
            der da wäre?
            Sorry, aber er
            EDIT:
            DU
            wolltest wissen, welchen Fehler es gibt, wenn ichs so lasse !

            wenn ich node1.left_id nehme bekomm ich für jedes Level 6, da ich 6 Einträge habe.

            Es funktioniert NUR, wenn ich die Spaltennahmen aus dem Tutorial nehme irgendwie, was ja unlogisch ist, wenn LFT net irgendein besonderer SQL-Tag ist, deswegen versteh ich es ja nicht.

            das folgende ist mein Quetry, wollts nur net komplizierter machen


            Code:
            $this->query('SELECT node1.'.$this->vars['tblpf'].'node_id,
                                      floor(( node1.'.$this->vars['tblpf'].'right_id - node1.'.$this->vars['tblpf'].'left_id) / 2) AS children,
                                      COUNT(*) AS level
                                      '.$add_sql['fields'].'
                                  FROM '.$this->vars['table'].' AS node1,
                                      '.$this->vars['table'].' AS node2
                                      '.$add_sql['joins'].'
                                  WHERE node1.'.$this->vars['tblpf'].'root_id = 1
                                      AND node2.'.$this->vars['tblpf'].'root_id = 1
                                      AND node2.'.$this->vars['tblpf'].'left_id
                                          BETWEEN node2.'.$this->vars['tblpf'].'left_id AND node2.'.$this->vars['tblpf'].'right_id
                                      '.$add_sql['where'].'
                                  GROUP BY node1.'.$this->vars['tblpf'].'left_id');
            außer vars['table'] ist alles leer!

            TabellenStruktur zum Test sieht so aus:

            CREATE TABLE `nstest` (
            `node_id` int(10) unsigned NOT NULL auto_increment,
            `root_id` int(10) unsigned NOT NULL default '0',
            `payload` varchar(64) default NULL,
            `left_id` int(10) unsigned NOT NULL default '0',
            `right_id` int(10) unsigned NOT NULL default '0',
            PRIMARY KEY (`node_id`),
            KEY `root_id` (`root_id`)
            ) TYPE=MyISAM AUTO_INCREMENT=10 ;

            Kommentar


            • #7
              Original geschrieben von Hatachy
              [..] AND node1.left_id BETWEEN 1 AND 12 [..]
              soweit ich weiß hatte das daniel t. gorksi in seinem tut nicht stehen
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                nimm einfach den hierdrüber, mache immer fehler beim kürzen

                OK, nen schritt weiter bin ich schonmal

                Mein Query muss falsch sein, funzt wenn ich das sowohl in der tut tabelle, als auch in dem tut query ändere. fragt sich jetzt nur noch wo

                sorry
                Zuletzt geändert von Hatachy; 12.07.2004, 19:51.

                Kommentar


                • #9
                  Tja, tschuldigung @ all, hab Fehler.

                  Habe die between-klausel mit node2
                  und die group by mit node1

                  tja, manchmal ist kopieren doch besser als selber tippen. Kann man ja vielleicht beim Tut ergänzen, dass man dadrauf achten sollte und das LFT klein schreiben. hat mich von Anfang an verwirrt. Sorry nochmal und danke für die Hilfeversuche

                  Kommentar


                  • #10
                    OffTopic:
                    @Hatachy
                    mache mal bitte dein banner in der signatur deutlich kleiner (so auf 88x31) oder ganz raus.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar

                    Lädt...
                    X