首先,对不起我的英语不好......MySQL中的高级JOIN查询?
我的一个MySQL查询出现问题。我有两个表:消息和答复。 消息表包含一个id,discussion_id,内容和日期字段。答复表包含一个ID,message_id,内容和日期字段。
我希望对于一个特定的讨论,最新的10条消息及其答复被提取。消息需要在最后一个回复中排序,回复需要首先排序。
(Facebook一样)
我是这样做的:
SELECT * FROM messages WHERE discussion_id = 'test' ORDER BY date DESC;
,然后使用PHP foreach循环
SELECT * FROM replies WHERE message_id = 'test' ORDER BY date ASC;
但是,如果我会用我所11个查询,这并不理想。我正在考虑加入或联合,但如果我这样做,答复和消息是不可分开的。该列表按照answers.date排序,但回复和他们的父母消息不再在一起。我正在使用:
SELECT * FROM messages LEFT JOIN replies ON messages.id = replies.message_id WHERE discussion_id='4cc43b40586b6' ORDER BY replies.date DESC
是否可以为此任务进行一次查询?
我这样做的时候,我总是在消息表中的列与最后回复日期(或者如果数据很简单,只是一个表的所有邮件和回复)。那么很容易先排序,然后再排序。仅供参考,它可能会为您在插入/更新期间优化这一点而不仅仅是获取时节省一些麻烦。 – 2010-11-29 15:31:25