WHERE geht nicht...

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

  • WHERE geht nicht...

    Hallo Habe folgende Query:

    Code:
    SELECT *, (SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A0` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%URLAUB%') AND `A0`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1) AS `S_0` , (SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A1` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%Gesund%') AND `A1`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1) AS `S_1` FROM `guw_index` `B` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%URLAUB%') OR `word_word` LIKE LOWER('%Gesund%') AND ( `S_0` >= '1' AND `S_1` >= '1' ) GROUP BY `index_seite_id`
    Schicke ich diese ab, dann kommt die Fehlermeldung:
    Code:
     #1054 - Unknown column 'S_0' in 'where clause'

    Entferne ich
    Code:
    AND ( `S_0` >= '1' AND `S_1` >= '1' )
    Kommt ein Ergebnis. Und ich habe S_0 und S_1


    Hat jemand eine Idee?
    Beachte: Dumm ist, wer Dummes tut.

  • #2
    MySQL :: MySQL 5.5 Reference Manual :: C.5.5.4 Problems with Column Aliases
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Das Heißt ja

      in Group By, Order By und having gehts aber in WHERE nicht.

      MIST
      Beachte: Dumm ist, wer Dummes tut.

      Kommentar


      • #4
        Gib zur Spalte auch die Tabelle an. Schon allein wegen der Lesbarkeit solltest du das machen.

        Verwende niemals SELECT * sondern gib immer alle Spalten im SELECT an, die du im Ergebnis haben möchtest.

        Kommentar


        • #5
          Noch probiere ich in PHPMyAdmin rum, im Script gebe ich nur die Spalten an.

          Wie meinst du, ich solle auch die tabellen angeben?
          Beachte: Dumm ist, wer Dummes tut.

          Kommentar


          • #6
            Zitat von bofan Beitrag anzeigen
            Wie meinst du, ich solle auch die tabellen angeben?
            Code:
            SELECT t1.id, t1.foo, t2.bar
            FROM tabelle1 t1
            LEFT JOIN tabelle t2 ON ( t2.id = t1.tabelle2_id )

            Kommentar


            • #7
              Code:
              SELECT *, 
              (
              SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A0` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%URLAUB%') AND `A0`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1
              ) AS `S_0`, 
              (
              SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A1` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%Gesund%') AND `A1`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1
              ) AS `S_1`
               FROM `guw_index` AS `B` LEFT JOIN `guw_index_word` AS `C` ON `C`.`word_id` = `B`.`index_word_id` WHERE `C`.`word_word` LIKE LOWER('%URLAUB%') OR `C`.`word_word` LIKE LOWER('%Gesund%') AND ( `S_0` >= '1' AND `S_1` >= '1' ) GROUP BY `B`.`index_seite_id`
              meinst du so?

              Aber in WHERE kann ich nicht den Spalten S_0 ansprechen.

              Die Query nutze ich um einen Index-Abzufragen.

              Nun will ich sagen wir 2 Suchworte mit UND verknüpfen. Das heißt die `word_word` müssen beide in der `index_seite_id` vorkommen. kann ich das vllt anders lösen. Ich habe mit der SubQuery die Anzahl der Vorkommen in S_0 bzw. S_1 eingetragen. Wenn diese >= 1 dann vorkommen, das heißt wenn beide 1 sind dann Seite OK.

              Geht das vllt. auch anders?
              Beachte: Dumm ist, wer Dummes tut.

              Kommentar


              • #8
                Zitat von bofan Beitrag anzeigen
                Aber in WHERE kann ich nicht den Spalten S_0 ansprechen.
                S_0 ist ja auch keine Spalte, sondern ein Alias für ein Sub-Query.

                Kommentar


                • #9
                  wie kann ich denn die spalte anz in der subquery ansprechen? Geht das?
                  Beachte: Dumm ist, wer Dummes tut.

                  Kommentar


                  • #10
                    S_0.anz

                    Kommentar


                    • #11
                      Dann aber auch in dem WHERE - Teil?


                      Edit:

                      Code:
                      SELECT *, (SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A0` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%GESU%') AND `A0`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1) AS `S_0` , (SELECT COUNT(*) AS `anz` FROM `guw_index` AS `A1` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%PEND%') AND `A1`.`index_seite_id` = `B`.`index_seite_id` LIMIT 1) AS `S_1` FROM `guw_index` `B` LEFT JOIN `guw_index_word` ON `word_id` = `index_word_id` WHERE `word_word` LIKE LOWER('%GESU%') OR `word_word` LIKE LOWER('%PEND%') AND ( `S_0`.`anz` >= '1' AND `S_1`.`anz` >= '1' ) GROUP BY `index_seite_id`
                      Das ist nun meine Query, der * wird noch durch die spalten ersetzt!

                      Leider kommt:
                      #1054 - Unknown column 'guw.S_0.anz' in 'where clause'
                      Zuletzt geändert von bofan; 17.07.2013, 08:57.
                      Beachte: Dumm ist, wer Dummes tut.

                      Kommentar


                      • #12
                        Die Abfrage ist generell unnötig kompliziert, aufgebläht und unlesbar. Das ganze noch gespickt mit kryptischen Abkürzungen (B, S_0, S_1, etc.). Ich würde das ganze Ding weg schmeißen und nochmal sauber neu anfangen. Das ist doch auf Dauer überhaupt nicht wartbar.

                        Kommentar


                        • #13
                          Gut. Vllt. sollte ich das tun!

                          Hast du dann einen Ansatz für mich?
                          Beachte: Dumm ist, wer Dummes tut.

                          Kommentar


                          • #14
                            Was willst du überhaupt erreichen?

                            Kommentar


                            • #15
                              Also.

                              Ich habe 2 Tabellen.

                              guw_index
                              sowie
                              guw_index_word

                              in der guw_index_word
                              word_id
                              word_word (index-word)

                              in der guw_index
                              index_id
                              index_word_id (gleich word_id)
                              index_seite_id
                              index_seite_art (1 = Seite; 2 = Neuigkeit)
                              index_anzahl

                              ich lasse mir meine seiten vom cron auslesen. jedes wort kommt in den guw_index_word
                              das vorkommen speicher ich in guw_index


                              nun will ich erreichen,

                              Wenn ein nutzer 2(oder mehr) Suchworte eingibt, dass nur seiten mit beiden INDEX-Worten gefunden werden... also wo seite_id und seite_art gleich sind...

                              Verständlich?
                              Beachte: Dumm ist, wer Dummes tut.

                              Kommentar

                              Lädt...
                              X