Mit AS gebildete Spalte als Variable in On-Clause?

Kalma

Erfahrenes Mitglied
Guten Abend,

ich kämpfe seit einigen Tagen mit folgendem Problem, zudem ich auch nichts in Google finden konnte.
(Finden ließ sich einiges, aber nicht dass, was ich gesucht hatte..)


Ich habe folgenden MySQL-Code:
PHP:
SELECT
    user.user_id,
    user.user_firstname,
    user.user_lastname,
    connections.connection_actor, 
    connections.connection_with,
    CASE
     WHEN 
        connections.connection_actor =2
     THEN 
        connections.connection_with
     ELSE 
        connections.connection_actor
     END 
       AS getthisuser
FROM 
    `connections`
LEFT JOIN
    user
ON
    user.user_id = getthisuser
WHERE
    (connections.connection_with = 2
     OR
     connections.connection_actor = 2)
AND
    connections.connection_accepted = 1

Dieser funktioniert einwandfrei, bis auf folgendes:
Code:
ON
    user.user_id = getthisuser

Dabei kommt natürlich ein Fehler, dass die Spalte "getthisuser" nicht existiert, da sie ja mit dem AS-Befehl im SELECT generiert wurde...

Da ich diese Anweisung aber unbedingt brauche, und echt nicht weiterkomme, frage ich mal hier nach.
Könnt ihr mir sagen, wie ich diese generierte Spalte "getthisuser" in der ON-Clause verwenden kann?



Gruß und vielen Dank im Voraus
Kalma
 
Man kann bei MySQL problemlos die SQLs verschachteln
SQL:
SELECT
    user.user_id,
    user.user_firstname,
    user.user_lastname,
    con.connection_actor, 
    con.connection_with,
    con.getthisuser
FROM 
    (
    	SELECT
    		connection_actor,
    		connection_with,
    		CASE
		     	WHEN connection_actor =2
		     	THEN connection_with
		     	ELSE connection_actor
		    END AS getthisuser
    	FROM
    		`connections`
		WHERE
		    (connection_with = 2 OR connection_actor = 2)
			AND connection_accepted = 1  
    ) AS con
	LEFT JOIN user
		ON user.user_id = con.getthisuser
 
Zuletzt bearbeitet von einem Moderator:
Ah also doch mit Unterabfrage... Das hatte ich versucht, aber wohl falsch! ;)


Vielen Dank für die schnelle Antwort!
 
Dein ANsatz geht auch. Jedoch musst du dann im ON-Teil des JOINs nicht den Alais nehmen sondern nochmals die Formel.
Wenn du anstelle des CASE den IF nimmst, wirds auch kürzer.

Das folgende müsste eigentlich auch gehen. Ich finde aber die Unterabfrage sauberer
SQL:
SELECT
    user.user_id,
    user.user_firstname,
    user.user_lastname,
    connections.connection_actor, 
    connections.connection_with,
    IF(connections.connection_actor =2, connections.connection_with, connections.connection_actor) AS getthisuser
FROM 
    `connections`
LEFT JOIN
    user
ON
    user.user_id = IF(connections.connection_actor =2, connections.connection_with, connections.connection_actor)
WHERE
    (connections.connection_with = 2
     OR
     connections.connection_actor = 2)
AND
    connections.connection_accepted = 1
 
Zuletzt bearbeitet von einem Moderator:
Zurück