Вопрос по mysql, php, database – Получение последней заметки (по метке времени) в одном запросе из таблицы 1: n

1

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

users
id, name, field2, field3

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

Что я хочу сделать, это выбрать каждого пользователя, и последняя (только 1) заметка, опубликованная каждым пользователем, основана на отметке времени, отображаемой в обзорном отчете.

Как мне это сделать? Обратите внимание, что БД - MySQL.

Благодарность

Может стоит посмотреть на это: / Stackoverflow.com вопросы / 881198 / ... Tom Haigh

Ваш Ответ

3   ответа
2
 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)
Я закончил тем, что использовал этот ответ. Мне нужно было внести несколько изменений, но в итоге это сработало! Благодарность hellopat
1
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
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`
)

Похожие вопросы