mysql, ограничивающий соединение - PullRequest
1 голос
/ 22 сентября 2011

Я провел несколько поисков по этому вопросу, но ни одно из решений, похоже, не работает, поэтому, возможно, мое требование немного отличается.

В основном у меня есть таблица содержимого и таблица 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 Ответ

2 голосов
/ 22 сентября 2011

Если в вашей таблице file_screenshots есть какой-то уникальный столбец идентификаторов, это должно работать для вас:

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.Переименуйте его, если необходимо.

Если вы хотите получить 5 снимков экрана с наибольшим идентификатором, отмените сравнение fs2.id и fs.id.

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