2016-12-20 8 views
0

ここに私のジレンマがあります。私はギャラリーに最も最近の画像投稿を表示したい。問題は、最新の投稿が同じ人によって行われることがあることです。時には大抵の人が一度に複数の写真をアップロードすることがあるので、一度しか表示されない人が好きです。MySqlクエリでフィルタリングされた結果ONCEを表示する方法

私のテーブルは、(単純化)された基準について

Users 
user_id, username 

Gallery 
media_id, user_id, filename, date_added 

これは私の現在のクエリです:理想的

user_id: 9000 7383idsj39390.jpg 
user_id: 9000 sdujnfsd83ss2.jpg 
user_id: 829 sdfs3dgsdfsd3.jpg 
user_id: 1000 dsfsdfsd34523.jpg 

SELECT g.* 
    , u.user_id 
    , u.fullname AS real_name 
    FROM gallery g 
    LEFT 
    JOIN users u 
    ON u.user_id = g.user_id 
WHERE g.status = 'approved' 
ORDER 
    BY g.date_added DESC 
LIMIT 10 

は、だから私はのようなものを取得、私は使用したいrは一意のユーザーになります。

user_id: 9000 7383idsj39390.jpg 
user_id: 829 sdfs3dgsdfsd3.jpg 
user_id: 1000 dsfsdfsd34523.jpg 
user_id: 500 29928sdksdui2.jpg 

私は実際にどのようにこれにアプローチするのか分かりません。どんな助けもありがとう!

+1

なぜ 'image_122266.jpg'なく' image_122242.jpg' –

+0

クール...多分私はあそこに向かうだろう後で:-) –

+1

@TimBiegeleisenがある最初の左上をhttp://winterbash2016.stackexchange.com/ –

答えて

0

各ユーザーのレコードの辞書編集上最も大きなイメージファイル名をそのまま受け入れることができる場合は、GROUP BYとともにサブクエリを使用して、結果セットに表示するレコードを識別することができます。このような何か作業をする必要があります:

SELECT g.*, 
     u.user_id, 
     u.fullname AS real_name 
FROM Gallery g 
LEFT JOIN Users u 
    ON u.user_id = g.user_id 
INNER JOIN 
(
    SELECT u.user_id, MAX(g.file_name) AS file_name 
    FROM Gallery g 
    LEFT JOIN Users u 
     ON u.user_id = g.user_id 
    WHERE g.status = 'approved' 
    GROUP BY u.user_id 
) t 
    ON u.user_id = t.user_id AND 
     g.file_name = t.file_name 
ORDER BY g.date_added DESC 
LIMIT 10 
+0

まあ、ファイル名は単なる例に過ぎませんでした。実際にはランダムな言葉です。上記のように重複したリンクを見ましたが、フィドルリンクは機能しません。答えの1つは私が実際にそれを調べる必要はないusersテーブルの中を見るので私には意味をなさない...ちょうどギャラリーテーブルの中の「重複した」ユーザーを排除したい。 – Hugo

関連する問題