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ます。ここで何が悪いのか誰か知っていますか?

ありがとう。

4

1 に答える 1

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
于 2013-08-10T04:42:46.313 に答える