mysql限制连接

时间:2011-09-22 09:15:54

标签: mysql join limit left-join

我已就此主题进行了一些搜索,但没有解决方案似乎有用,所以我的要求可能略有不同。

基本上我有一个“内容”表和一个“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 个答案:

答案 0 :(得分: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。必要时重命名。

如果您想要具有最高ID的5个屏幕截图,请反转fs2.id与fs.id比较。

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