Получение последней заметки (по метке времени) в одном запросе из таблицы 1: n - PullRequest
1 голос
/ 29 июня 2009

Допустим, у меня есть две таблицы, пользователи и заметки. Допустим, схемы выглядят так:

users
id, name, field2, field3

notes
id, user_id, subject, heading, body, timestamp

То, что я хочу сделать, - это выбрать каждого пользователя, и ПОСЛЕДНЯЯ (только 1) заметка, опубликованная каждым пользователем на основе метки времени, отображаемой в обзорном отчете.

Как бы я поступил так? Обратите внимание, что БД - MySQL.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 29 июня 2009
 select users.name, notes.subject, notes.heading, notes.body
 from users, notes
 where users.id = notes.user_id
 and notes.timestamp = (select max(timestamp) from notes where user_id = users.id)
1 голос
/ 29 июня 2009
select u.id, u.name, n.id as note_id, n.subject, n.heading, n.body, n.timestamp
from users u
left outer join (
    select user_id, max(timestamp) as timestamp
    from notes
    group by user_id
) nm
left outer join notes n on nm.user_id = n.user_id and nm.timestamp = n.timestamp

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

0 голосов
/ 29 июня 2009
SELECT *
FROM `users`
LEFT JOIN `notes`
ON `user_id` = `users`.`id`
WHERE `notes`.`timestamp` = (
    SELECT MAX(`timestamp`)
    FROM `notes` AS `notes_1`
    WHERE `notes_1`.`user_id` = `notes`.`user_id`
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...