Kann man diese Anweisungen zusammenlegen?

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

  • Kann man diese Anweisungen zusammenlegen?

    Hallo

    Ich habe folgende Anweisungen, leider sind es zwei, ich hätte aber gerne nur eine, mySQL ist 4.0.0
    Code:
    SELECT `lft`, `rgt` FROM `hs_dir_nest` WHERE `nest` = "3"
    SELECT l.`link` FROM `hs_dir_links` l, `hs_dir_nest` n WHERE l.`cat_id` = n.`nest` AND n.`lft` BETWEEN 3 AND 6
    Bei der zweiten Anweisung steht "BETWEEN 3 AND 6"
    3 und 6 sind lft und rgt vom Select eins höher.
    Aber ich krieg die nicht kombiniert

    Ich dachte an sowas wie
    Code:
    SELECT l.`link` FROM `hs_dir_links` l, `hs_dir_nest` n WHERE l.`cat_id` = n.`nest` AND n.`lft` BETWEEN n.`lft` WHERE n`nest`="3" AND n.`rgt` WHERE n`nest`="3"
    aber das nimmt er nicht, kein Wunder, bei dem Syntax
    Zuletzt geändert von Seikilos; 03.07.2005, 13:38.
    SQL Injection kitteh is...

  • #2
    naja, wie wärs wenn du erstmal 1 WHERE klausel machst und das logisch mit and verknüpfst..?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Was heißt den logisch, die Anweisungen funktionieren ohne Probleme, liefen schon sinnvolles, aber es sind zwei querys

      es soll das selected werden was `cat_id` =`nest` ist, allerdings nur die nests, die ein lft und rgt zwsichen x und y haben
      SQL Injection kitteh is...

      Kommentar


      • #4
        gnaa, er meint statt WHERE ... WHERE ... WHERE ... sollst du mal über WHERE ... AND ... AND ... nachdenken.

        Kommentar


        • #5
          Ich weiß was er meint und ich habe es auch probiert.
          Wenn ich es mal als Text darstelle:
          Code:
          WÄHLE l.`link` VON `hs_dir_links` l, `hs_dir_nest` n
          WO l.`cat_id` = n.`nest`
          UND NUR DIE n.`nest` DIE
          NICHT lft<lft UND lft>rgt WOBEI lft UND rgt VON dem n.`nest` KOMMEN, WO
          n.`nest` = 3 IST
          Es geht nicht mit ANDS (meiner Meinung nach), weil lft und rgt Werte von etwas sind, vonwas ich keine Bedingung habe (`nest` = 3)

          Die AND Möglichkeiten habe ich durchgespielt
          SQL Injection kitteh is...

          Kommentar


          • #6
            Helfen dir eventuell JOINs?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Das versuche ich gerade rauszufinden, aber vorsichtig vermutet lande ich mit den Wheres wieder genau da
              SQL Injection kitteh is...

              Kommentar


              • #8
                Es steckt fest, ich brauch sowas wie den sofortigen Index.
                Mehr fehlt qausi sowas wie WHERE lft > [der lft Wert von einem übergebenen Nest]
                SQL Injection kitteh is...

                Kommentar


                • #9
                  Ich denke immernoch, dass das mit einem JOIN geht, gibt auch einen Thread hier (oben angepinnt im SQL-Forum)

                  Wie sehen denn deine Versuche aus?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Gerade das SQL Fenster geschlossen, d'oh

                    habe aber nichts brauchbares
                    Code:
                    SELECT l.`links` FROM `hs_dir_links` l 
                    LEFT JOIN `hs_dir_nest` n ON l.`cat_id` = n.`nest`
                    WHERE
                    Ich erkläre mal, wie es ablaufen soll, die SQL bekommt eine Anweisung, diese lautet "3" , 3 ist eine Zeihl in der Spalte n.`nest` zu der genau ein lft und ein rgt Wert aus der hs_dir_nest DB gehören.
                    Jetzt das Problem, ich muss jede l.`cat_id` = n.`nest` auswählen, wobei das n.`nest` hier nicht die 3 ist.
                    Es soll mir aber nicht alle n.`nest` ausspucken, sondern NUR diejenigen
                    welche in der Spalte lft größere Werte haben, als vom übergebenen nest = 3 für lft und und gleichzeitig muss lft kleinere Werte habe, als vom übergebenen nest = 3 für rgt.
                    Ich versuche mal n Dump aus den DBS darzustellen. Sekunde
                    SQL Injection kitteh is...

                    Kommentar


                    • #11
                      Ok, versuchen wir es,
                      Code:
                      +-----------------+
                      |   hs_dir_nest   |
                      +-----+-----+-----+
                      |nest | lft | rgt |
                      +-----+-----+-----+
                      |  1  |  1  | 18  |
                      |  2  |  2  | 11  |
                      |  3  |  3  |  6  |
                      |  4  |  4  |  5  |
                      |  5  |  7  | 10  |
                      |  6  |  8  |  9  |
                      |  7  | 12  | 17  |
                      |  8  | 13  | 14  |
                      |  9  | 15  | 16  |
                      +-----+-----+-----+
                      
                      +---------------+
                      | hs_dir_links  |
                      +-----+-----+---+
                      | link | cat_id |
                      +------+--------+
                      |  a   |   3    |
                      |  b   |   4    |
                      |  c   |   6    |
                      +------+--------+
                      So, Beispiel:
                      Ich will alle 'link' aus hs_dir_links deren cat_id den nest der hs_dir_nest entspricht welche mit dem lft Wert zwsichen lft und rgt von nest = 2 liegen

                      Edit, in dem Falle wären es von nest = 2 Werte von lft 2 und rgt 11 und alle nests, deren lft Werte größer 2 und kleiner 11 sind, sollen gewählt werden -> das sind 3,4,5,6 und es sollen die cat_ids ausgegeben werden, welche mit den nests 3,4,5,6 übereinstimmen, hier a,b,c
                      Zuletzt geändert von Seikilos; 04.07.2005, 10:26.
                      SQL Injection kitteh is...

                      Kommentar


                      • #12
                        Code:
                        SELECT
                          l.link, 
                          n.nest, n.lft, n.rgt
                        FROM
                          hs_dir_nest n2
                          INNER JOIN hs_dir_nest n ON n.lft BETWEEN n2.lft AND n2.rgt
                            INNER JOIN hs_dir_link l ON l.cat_id = n.nest
                        WHERE n2.nest = 2
                        Was kommt da raus?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          WOW.
                          Du gewinner, es funktioniert wirklich,
                          ích klebte wohl zu sehr an Left Join.

                          Vielen Dank, ich werd mir das äußerst genau angucken
                          SQL Injection kitteh is...

                          Kommentar

                          Lädt...
                          X