Bobby: MySQL Problem mit subselect und Feldnamen

Moin

ich hab folgende SQL-Anweisung:

  
SELECT SQL_CALC_FOUND_ROWS a.*, (IF((SELECT stelle1 FROM startseitenanzeige)!='',(SELECT stelle1 FROM startseitenanzeige),'0')) stelle1, (IF((SELECT stelle2 FROM startseitenanzeige)!='',(SELECT stelle2 FROM startseitenanzeige),'0')) stelle2 FROM stellenangebote a WHERE a.id=(IF(stelle1!=0),stelle1,'1012')  

Als Fehlermeldung wird mir geliefert:
Unknown column 'stelle1' in 'where clause'

Wenn ich die Where-Klausel weglasse werden mir die Datensätze ordentlich angezeigt und stelle 1 und stelle2 mit '0', da in startseitenanzeige nix drin steht. So soll es auch sein. Und in der Where-Klauselsoll nun geprüft werden ob stelle1 nen Wert besitzt.

Warum kennt mySQL in der Whreklausel nicht die in den Feldern definierte stelle1?

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
### Henry L. Mencken ###
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
## Viktor Frankl ###
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. Hi!

    Unknown column 'stelle1' in 'where clause'
    Warum kennt mySQL in der Whreklausel nicht die in den Feldern definierte stelle1?

    Die WHERE-Klausel kann sich nicht auf Ergebnisse der SELECT-Klausel beziehen, weil WHERE zuerst ausgeführt wird und später erst von der so eingeschränkten Ergebnismenge die Berechnung der SELECT-Klausel-Ausdrücke vorgenommen wird. HAVING wäre ein Weg, aber der ist eventuell länger, weil dafür erst auch von nicht benötigten Datensätzen die SELECT-Klausel-Ausdrücke berechnet werden müssen.

    Weitere allgemeine alternative Lösungsmöglichkeiten: Joins, WHERE ohne Bezug auf SELECT-Klausel-Ausdrücke.

    Lo!

    1. Moin

      HAVING wäre ein Weg, aber der ist eventuell länger, weil dafür erst auch von nicht benötigten Datensätzen die SELECT-Klausel-Ausdrücke berechnet werden müssen.

      Genau das ist es was ich brauchte. Hatte ich schonmal gehört aber bisher noch nicht angewendet. Nun funktionierts wie gewünscht. recht herzlichen Dank

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      ### Henry L. Mencken ###
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ## Viktor Frankl ###
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. moin,

        Genau das ist es was ich brauchte. Hatte ich schonmal gehört aber bisher noch nicht angewendet. Nun funktionierts wie gewünscht. recht herzlichen Dank

        das mit HAVING zu lösen ist sehr unschön, dort machen eigentlich nur aggregat-funktionen sinn. der bessere weg wäre es, in der WHERE klausel die entsprechenden datensätze zu filtern. das geht recht einfach. aber was für daten sind den bitteschön in der tabelle "startseitenanzeige" enthalten ?

        Ilja

        1. Moin

          aber was für daten sind den bitteschön in der tabelle "startseitenanzeige" enthalten ?

          Da stehen 2 ids drin von datensätzen die auf der startseite angezeigt werden sollen. Es soll nun geschaut werden ob ids eingetragen wurden. Wenn nicht soll ein zufallsdatensatz gewählt werden.

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          ### Henry L. Mencken ###
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ## Viktor Frankl ###
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
          1. moin,

            Da stehen 2 ids drin von datensätzen die auf der startseite angezeigt werden sollen. Es soll nun geschaut werden ob ids eingetragen wurden. Wenn nicht soll ein zufallsdatensatz gewählt werden.

            was mich dabei wundert ist diese unterabfrage "SELECT stelle1 FROM startseitenanzeige" in der IF klausel. wenn da mehr als ein datensatz in der tabelle steht, dann fliegt dir das ganze um die ohren.

            Ilja