2011-09-22 130 views
1

我已經在這個主題上做了一些搜索,但非解決方案似乎工作,所以也許我的要求略有不同。mysql限制連接

基本上我有一個「內容」表和一個「file_screenshots」表。 「file_screenshots」表中的每一行都有一個「screenshot_content_id」列。我想從「內容」表中選擇,加入「file_screenshots」表格,但僅爲任何單個內容選擇最多5個屏幕截圖。

如果這是不可能的,我很樂意使用兩個查詢,但我不知道如何限制結果只接收每段內容的5個屏幕截圖。

下面是一個例子查詢:

SELECT * FROM content 
LEFT JOIN file_screenshots 
ON file_screenshots.screenshot_content_id = content.content_id 
WHERE content_type_id = 4 
+1

檢查這個問題:http://stackoverflow.com/questions/1042481/mysql-join-with-limit –

+0

這:http://stackoverflow.com/questions/1442527/how-to-select - 最新 - 每個項目四項 –

+0

歡呼的鏈接,但我不明白如何直接使用這些答案中給出的例子給我自己的解決方案。第二個返回單個屏幕截圖的所有內容的列表(而不是每個內容的5行),我無法弄清楚如何爲我自己的例子重寫第一個鏈接在所有。 – robjbrain

回答

2

假設你有你的file_screenshots表某種獨特的ID列的,這應該爲你工作:

SELECT 
    c.*, 
    fs.* 
FROM 
    content c 
JOIN 
    file_screenshots fs 
    ON (fs.screenshot_content_id = c.content_id) 
LEFT JOIN 
    file_screenshots fs2 
    ON (fs2.screenshot_content_id = c.content_id AND fs2.id < fs.id) 
GROUP BY 
    fs.id 
HAVING 
    COUNT(*) < 5 
ORDER BY c.content_id, fs.id 

我命名的ID列id。如果需要重命名它。

如果你想要5個最高ID的截圖,請將fs2.id與fs.id進行比較。

ON (fs2.screenshot_content_id = c.content_id AND fs2.id > fs.id) 
+0

乾杯真的很好,我可以預見的唯一問題是,如果沒有截圖,即使使用左連接,它也不會工作。對我來說,這不是一個問題,但應該注意其他人閱讀:) – robjbrain

+0

@FreezeDriedPop用'LEFT JOIN'替換第一個'JOIN',並且你還應該從'content'中取得那些沒有'file_screenshots'中的相應行 –