Le as
crée un alias de colonne (dans ce cas other_id
), et vous ne pouvez pas joindre sur un alias de colonne. Vous pouvez utiliser un alias dans le ORDER BY
mais nulle part ailleurs, sauf si l'alias provient d'une sous-requête.
Votre meilleure option ici serait de répéter le IF
fonction dans la jointure :
SELECT
a.id,
a.from member_id,
a.to member_id,
IF(a.from member_id=1, a.to member_id, a.from member_id) as other_id,
a.text,
MAX(a.date sent) as date sent
FROM message a
JOIN members m on IF(a.from member_id=1, a.to member_id, a.from member_id) = m.id
WHERE (a.from member_id=1 OR a.to member_id=1) AND a.active=1
GROUP BY other_id
ORDER BY other_id DESC, date sent DESC