MySQL select im select und if

RaVenC

Mitglied
Hi..
Hab (vermutlich ein kleines) Problem, wo ich gerade irgendwie auf'm schlauch steh :-(

Folgende SQL Anweisung (ich hab sie für hier einmal vereinfacht) funktioniert ganz gut, aber gefällt mir nicht, da ich so 2 mal die selbe Abfrage starten muss.. :(

Code:
SELECT
  ...
  IF((SELECT x FROM z WHERE y=t.k LIMIT 1),(SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...

Sprich gibt "(SELECT x FROM z WHERE y=t.k LIMIT 1)" ein Ergebnis zurück, so soll a das Ergebnis sein, Ansonsten ist a die (php) Variable $h..
Mir gefällt dies nicht, da hier 2 mal "(SELECT x FROM z WHERE y=t.k LIMIT 1)" vorkommt..

Versucht man:
Code:
SELECT
  ...
  (SELECT x FROM z WHERE y=t.k LIMIT 1) AS temp
  IF(temp,temp,'$h') AS a
FROM
  ...
So wird einem "Unknown column 'temp' in 'field list'" um die Ohren geworfen..
Genauso bei SELECT x AS temp FROM ...

Bin langsam am verzweifeln ;)
Hoffe ihr könnt mir helfen :)

Viele Grüße
 
bin mittlerweile selbst auf die Lösung des Problems gestoßen ;)

Code:
SELECT
  ...
  COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...

Nun würde ich dieses a allerdings gern in der WHERE clause verwenden..


Code:
SELECT
  ...
  COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...
WHERE
  ...
  b=a
Kommt bei mir wieder
"Unknown column 'a' in 'where clause'"
Also bin ich weiterhin am verzweifeln ;)
 
hi, danke dir für die Antwort,
allerdings wird mir so auch der Error um die Ohren gehauen :(
bzw: Unknown column 'a.x' in 'where clause'
 
Hey raven,
warum versuchst du zwanghaft das ganze in ein Query zu legen?
Speicher dir das Ergebnis des einen Query als Result in eine Variable, werte sie aus und gehe dann optionale Querys an....

SQL-Statements komplex verschachteln mag vielleicht ein interessantes Thema sein, doch irgendwann verfehlt es aus meiner Erfahrung erstens schnell einen Zeit-Nutzen-Faktor und zweitens verliert man schneller die Übersicht (z..B. beim Debugging!!)
 
Hi John ;)
Das Problem bei der Sache ist, dass ich dann von meinen max 10 Query die ich mir pro Seite als Ziel gesetzt habe, auf über 100 Querys kommen kann, was wiederum den Seitenaufbau verlangsamt..
Und da geht es eigentl. um jede Millisekunde...
Werde morgen mal auf der Arbeit nen Kollegen fragen ob dem was einfällt...

Was mich auch wunder ist, das zB das nicht geht:
SQL:
SELECT
...
b AS a
FROM
...
WHERE
...
b=COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h')

Mit nem Select in der where clause stürzt gleich die ganze Datenbank ab -.-'
Wobei es beim WHERE in Update (glaub ich) funktioniert..
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück