dedlfix: Problem mit GROUP_CONCAT in Subquery

Beitrag lesen

Tach!

Schade, ich bin halt davon ausgegangen, dass, da die Queries von innen nach außen ausgeführt werden, die Ergebnisse der inneren Queries dem äußeren Query als das, was sie sind (hier ein String mit einer Aufzählung im für IN() korrekten Format), fix und fertig zur Verfügung stehen.

Auch dann bliebe das Problem bestehen, was als String und was als Code angesehen werden soll. Außerdem ist das gar nicht so einfach mit dem Auflösen. Bei einer Correlated Subquery wird diese ja mehrfach aufgerufen, und es muss erstmal der Wert aus der Hauptquery bekannt sein, damit man die Subquery aufrufen kann. Ich weiß nicht, ob der Query-Ausführer einfach feststellen kann, wann eine Subquery ein konstantes Ergebnis liefert und wann es bei jedem Durchlauf verschieden ist. Ich denke, man muss davon ausgehen, dass bei jedem Datensatz der innere Teil wieder neu ausgewertet wird.

Ich habe das jetzt in zwei Schritten erledigt.

  • Schritt 1: Anhand des bekannten Werts von 'parent' wird mit dem jeweils passenden Query die Werteliste generiert.

get the items for the sub navigation

if ($currentPage['parent'] == 0) {
$queryGetSubNavPrep = "[code lang=sql]SELECT
  GROUP_CONCAT(id) AS id
FROM Struktur
WHERE parent =


> } else {  
> $queryGetSubNavPrep = "~~~sql

SELECT  

>   GROUP_CONCAT(id) AS id  
> FROM Struktur  
> WHERE parent = 

~~~". intval($currentPage['parent']);  

> }[/code]  
  
Der variable Teil sitzt doch in der WHERE-Klausel. Du kannst da das IF() einbauen und die drei Parameter übergeben, oder du berechnest den Wert in PHP und übergibst übergibst das Ergebnis als Parameter für "WHERE parent = ?" Und lass das GROUP\_CONCAT() weg. Damit bekommst du eine Ergebnismenge. Und die Query, die diese Ergebnismenge erzeugt, lässt sich als Subbquery ins IN() schreiben.  
  
  
dedlfix.