私の DB には、課題と回答の 2 種類の画像があります。どちらにも緯度/経度の位置列があります。このクエリでは、ユーザーがINNER JOIN を介して最近作成したチャレンジまたはアンサーを選択したいと考えています。
(この背後にあるビジネス ロジック: 基本的には、ユーザーの最後の既知の場所を含むユーザーのリストを取得したいと考えています。これは、最新のチャレンジまたは回答のいずれか最新のものによって決定されます。ユーザーが最後に既知の場所を持っていない場合、このリストに含めるべきではありません。)
私は得てい[Err] 1054 - Unknown column 'U.Id' in 'where clause'
ます:
SELECT
U.Id,
U.TotalPoints,
LastImage.Lat,
LastImage.Lng
FROM User U
INNER JOIN
(
SELECT Lat, Lng FROM
(
(SELECT Lat, Lng, CreatedOn FROM AnswerImage WHERE UserId = U.Id ORDER BY Id DESC LIMIT 1)
UNION ALL
(SELECT Lat, Lng, CreatedOn FROM ChallengeImage WHERE UserId = U.Id ORDER BY Id DESC LIMIT 1)
) LastImages ORDER BY CreatedOn DESC LIMIT 1
) LastImage
WHERE U.Type = 1 AND U.Status = 2
ORDER BY TotalPoints DESC;
派生した「LastImages」テーブル (または適切な用語が何であれ) 内から User テーブル (エイリアス U) を参照できないようです。
誰でも助けることができますか?他の方法を試しましたが、すべての要件を満たすものはありません:
- ユーザーが少なくとも1 つのチャレンジまたは 1 つの回答を持っている場合にのみ行が返されます (したがって UNION)。
- 最新の (ChallengeImage.CreatedOn および AnswerImage.CreatedOn によって決定される) 画像が結合で使用されます。
ありがとう!