2016-11-24 64 views
0

我想配置只有一個對我的當前查詢的限制選擇最大的ID。添加在最大的ID爲SELECT查詢

我有下面這在rextester一個鏈接顯示的是什麼,我想弄清楚的一個實際的例子。對不起,雖然它的錯誤...不知道當我創建示例時我做錯了什麼。

不管怎麼說,你會看到:

INSERT INTO `profile_img` 
VALUES 
(1,24,'beach'), 
(2,55,'sandals'), 
(3,56,'hotel'), 
(4,55,'ocean'), 
(5,55,'corona'), 
(6,55,'tacos') 
; 

這是在我的profile_img表中的一些值。現在我的查詢選擇了此ON p.user_id = f.friend_one的所有配置文件映像。導致重複輸出。它看起來像這樣:

enter image description here

我只是希望它的輸出

55  
56 

,並且適當調整最大ID img它。任何人都知道如何我只能SELECTprofile_img表的img列的最大id爲匹配friend_one的user_id? ON p.user_id = f.friend_one

然而,有時用戶不具有profile_img。以前我在查詢中使用這個來獲得那些沒有的默認img。 (case when p.img <> '' then p.img else 'profile_images/default.jpg' end) as img

SELECT f.* 
     , p.* 
    FROM friends f 
    LEFT JOIN profile_img p 
    ON p.user_id = f.friend_one 
    WHERE f.friend_two = ? 
    AND f.status = ? 

http://rextester.com/RLXS27142

+1

你必須包括'DROP TABLE IF EXISTS '朋友'; DROP TABLE IF EXISTS 'profile_img';'上rextester http://rextester.com/ECAX16022 –

+0

@JuanCarlosOropeza感謝頂!我在看你那天做的那個。只是不知道這是必需的。 sqlfiddle太挑剔,速度太慢,所以我很高興你給我看了這個消息。 – Paul

+1

這隻需要MySQL,Postgres和SQL服務器不需要它 –

回答

1

如果我理解正確的話,你只是想最大id個人資料圖片:

SELECT f.*, p.*, 
     COALESCE(p.img, 'profile_images/default.jpg') as profile_img 
FROM friends f LEFT JOIN 
    profile_img p 
    ON p.user_id = f.friend_one AND 
     p.id = (select max(p2.id) from profile_img p2 where p2.user_id = p.user_id) 
WHERE f.friend_two = ? AND f.status = ?; 
+0

嗯..我認爲它可能工作,但我忘了把這個到我的問題。對於那些沒有profile_img的人,我將配置文件img設置爲默認值。在另一個查詢我都這樣了,但不知道如何將它添加到您所做的查詢..'(情況下p.img <>「」,然後p.img別人的profile_images/default.jpg「 \t \t年底)爲img' – Paul

+1

@Paul。 。 。我希望在'select'中將'coalesce(p.img,'profile_images/default.jpg')作爲img'。 –

+0

是否這樣? 'SELECT f。*,p。*,coalesce(p.img,'profile_images/default.jpg')as img',如果是這樣,它仍然只顯示一個55結果,而不顯示沒有配置文件的行的id 。 – Paul