mysql 限制连接

发布于 2024-12-05 15:41:11 字数 448 浏览 1 评论 0原文

我已经对此主题进行了一些搜索,但似乎没有一个解决方案有效,所以也许我的要求略有不同。

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

I've done a few searches on this subject but non of the solutions seem to work so perhaps my requirement is slightly different.

Basically I have a "content" table and a "file_screenshots" table. Each row in the "file_screenshots" table has a "screenshot_content_id" column. I want to select from the "content" table, join the "file_screenshots" table but only select a maximum of 5 screenshots for any single piece of content.

If this isn't possible i'm happy to use two queries, but again i'm not sure how to limit the results to only receiving 5 screenshots per piece of content.

Here is an example query:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

っ〆星空下的拥抱 2024-12-12 15:41:11

假设您的 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)

Assuming you have some sort of unique id column in your file_screenshots table, this should work for you:

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

I've named the id column id. Rename it if neccessary.

If you want the 5 screenshots with the highest id, reverse the fs2.id vs. fs.id comparison.

    ON (fs2.screenshot_content_id = c.content_id AND fs2.id > fs.id)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文