2013-08-10 1 views
1

У меня это заявление MySQL:Получения неизвестной ошибки столбца при использовании «как» в тузде заявлении

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 other_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 

, но я получаю сообщение об ошибке:

#1054 - Unknown column 'other_id' in 'on clause' 

Я создаю этот столбец с помощью as ключ. Кто-нибудь знает, что здесь не так?

Спасибо.

ответ

2

as создает псевдоним столбца (в данном случае other_id), и вы не можете присоединиться к псевдониму столбца. Вы можете использовать псевдоним в ORDER BY, но нигде иначе, если псевдоним не будет получен из подзапроса.

Ваш лучший вариант здесь будет повторять функцию IF в соединении:

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