SQL Последние фотографии из контактов (сгруппированы по контактам) - PullRequest
1 голос
/ 18 мая 2010

Короче говоря, этот вопрос заключается в том, что я хочу сделать что-то в соответствии с тем, что видно на домашней странице Flickr после входа в систему. На нем показаны три последние фотографии каждого из ваших друзей, отсортированные по дате, но сгруппированные по друзьям. .

Вот более длинное объяснение: например, у меня есть 3 друга: Джон, Джордж и Андреа. Список, который я хочу извлечь, должен выглядеть следующим образом:

George

  • Фото - 2010-05-18
  • Фото - 2010-05-18
  • Фото - 2010-05-12

John

  • Фото - 2010-05-17
  • Фото - 2010-05-14
  • Фото - 2010-05-12

Andrea

  • Фото - 2010-05-15
  • Фото - 2010-05-15
  • Фото - 2010-05-15

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

Я бы хотел сделать это из MySQL, и пока я попал сюда:

SELECT photos.user_id, photos.id, photos.date_uploaded
FROM photos
WHERE photos.user_id IN (SELECT user2_id
                         FROM user_relations
                         WHERE user1_id = 8)
ORDER BY date_uploaded DESC 

Где user1_id = 8 - текущий зарегистрированный пользователь, а user2_id - идентификаторы друзей. Этот запрос действительно возвращает последние файлы, загруженные контактами пользователя с id = 8, отсортированными по дате. Однако я хотел бы выполнить группировку и ограничение, указанные выше.

Надеюсь, это имеет смысл. Заранее спасибо.

1 Ответ

3 голосов
/ 18 мая 2010

Иногда единственный способ достичь цели - создать кусок SQL, настолько уродливый и отвратительный, что альтернатива выполнения нескольких запросов становится привлекательной: -)

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

friend_list = sqlexec "select user2_id from relations where user1_id = "
                      + current_user_id
photolist = []
for friend in friend_list:
    photolist += sqlexec "select user_id, id, date_uploaded from photos"
                 + " where user_id = "
                 + friend.get("user2_id")
                 + " order by date_uploaded desc fetch first 3 rows only"

# Now do something with photolist

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

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