Запрос на N записей, связанных с каждой записью, на которую ссылается набор ключей записи - PullRequest
1 голос
/ 24 ноября 2008

Вот упрощенная версия моего сценария:

  • У меня есть таблица с именем Project , на которую я ссылаюсь через поле 'id'.
  • У меня есть таблица с именем Фотография , в которой есть поле с именем 'project_id', которое я использую для привязки нескольких фотографий к одному проекту. Кроме того, в таблице фотографий есть поле 'id' с автоинкрементом, которое я использую для заказа.

Вот что я хочу сделать: Для набора значений идентификатора проекта я хочу получить последние 5 фотографий, добавленных в каждый проект - в идеале, конечно, в одном запросе. : -)

Другими словами, вместо наложения ограничения на один запрос, в идеале я хотел бы указать ограничение для каждого проекта на количество возвращаемых фотографий.

В настоящее время я реализую это как один запрос на проект, поэтому N проектов = N запросов (хорошая стратегия кэширования, безусловно, уменьшит риск, но это произойдет позже).

У кого-нибудь есть решение?

Спасибо.

Ответы [ 3 ]

1 голос
/ 24 ноября 2008

Для решения проблемы "последних n элементов" в MySQL посмотрите здесь: Как выбрать максимум 3 элемента на пользователей в MySQL? (это верно в верхнем ответе).

Когда вы берете его оттуда, все, что вам не хватает, - это СОЕДИНЕНИЕ с вашей таблицей Projects, что должно быть легко сделать.

0 голосов
/ 24 ноября 2008

Небольшое изменение раствора филистимлянина:

SELECT project.*, photo.* 
  FROM photo 
  LEFT JOIN project USING(project_id)
WHERE photo.project_id IN (comma separated list of project ids)
ORDER BY photo_id DESC 
LIMIT project.project_photos_limit

Хотя я не уверен, что LIMIT позволит вам использовать поле для этого.

0 голосов
/ 24 ноября 2008
SELECT project.*, photo.* 
  FROM photo 
  LEFT JOIN project USING project_id 
WHERE photo.project_id = '{$id}' 
ORDER BY photo_id DESC 
LIMIT project.project_photos_limit

Попробуй это? (с вашими именами полей, очевидно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...