2013-09-10 3 views
0

У меня есть эти две таблицы в MySQL:Как выбрать заголовок с последним временем жизни?

posts (id) 
post_titles (id, post_id, title, datetime, user_id) 
post_contents (id, post_id, content, datetime, user_id) 
post_statuses (id, post_id, status, datetime, user_id) 

posts (id) == posts_titles (post_id) 

В post_titles и post_contents может быть несколько записей для 1 posts (id).

Что мне нужно - это выбрать заголовок, который имеет последнее время. Я должен был бы выбрать все это, используя posts (id). Как я могу это сделать?

EDIT: мне нужно выбрать последнее название и последний контент вместе или последний заголовок, последний контент и последний статус.

+1

использование 'макс (DateTime) и' группа по post_id', чтобы получить максимальную DateTime на этот пост ... присоединиться к этой спиной к '' title' с post_id' и что Макс DateTime –

+0

кто-то спросил, то комментарий удален «не так ли?» мой ответ: не знаю. что, вероятно, будет зависеть от целой кучи информации, не указанной здесь ... –

ответ

4

Закажите интересующий вас столбец (datetime в этом случае) и сделайте лимит 1. Это упорядочит строки по дате в порядке убывания (сначала будет первый). А затем ограничьте 1, чтобы просто получить первую строку.

SELECT * FROM post_titles ORDER BY datetime DESC LIMIT 1; 
+0

Использовать соединение, чтобы добавить get_contents –

+2

В худшем случае сделайте выбор субтитров: ** выберите все из всех таблиц, где id (выберите id FROM post_titles ORDER BY datetime DESC LIMIT 1) ** –

0

Чтобы построить на ответ от Марка S (я не могу понять, как цитировать или ссылаться на его ответ ...)

Поскольку существуют datetime поля на обоих post_title и post_contents таблиц, вы должны будете указать, какие таблицы столбец для ссылки, как вы делаете заказ, как это:

SELECT `title`, `content` 
FROM `post_titles` t 
    JOIN `post_contents` c USING (`post_id`) 
ORDER BY t.datetime DESC 
LIMIT 1 
+0

Да, из-за 'LIMIT 1' в конце запроса это даст только сообщение, название которого было обновлено совсем недавно. Это то, о чем я думал, что вам нужно «название, которое имеет последнее время». Если вам нужно что-то большее или несколько сообщений, основанных на последнем времени одного из названий, то подход «подбора» в комментарии Марка С. является наилучшим подходом. –

1

Попробуйте это:

SELECT t.title, c.content 
FROM post_titles t 
JOIN post_contents c ON t.post_id = c.post_id 
WHERE 
t.datetime = 
    (SELECT MAX(x.datetime) FROM post_titles x WHERE t.post_id = x.post_id) 
AND 
c.datetime = 
    (SELECT MAX(y.datetime) FROM post_contents y WHERE c.post_id = y.post_id); 

Я предполагаю, что все datetime равны, потому что когда вы добавляете что-то на таблицы, контент создается одновременно.

EDIT: Теперь не имеет значения, равно ли datetime. Проверьте, работает ли он.

+1

Я неправильно понял раньше. Попробуйте отредактировать сейчас. – Minoru

Смежные вопросы