复杂的SQL(可能是外连接)

时间:2011-11-21 04:37:50

标签: php mysql sql join

我有两个表格,如下所示。

评论表
ID
USER_ID
回顾
标题
日期时间

PeopleFollows表
ID
USER_ID
following_user_id
日期时间

我想运行1个查询以按日期时间获得前10个结果。例如,如果我有以下数据:

评论表

1 user1  "This is my review" "title" 2011-01-10  
2 user1 "Another review" "title again" 2011-01-08  

人们关注表

1 user2 user1 2011-01-09 

我想得到这样的结果:

Review id=2  
People follows id=1
Review id = 1  

我认为我能做到这一点的唯一方法是对X限制进行单独查询,然后将它们组合起来得到X结果。

我可能需要再解释一下。

2 个答案:

答案 0 :(得分:2)

如果按日期时间对两个表编制索引,并且在UNION之前按日期时间对每个查询进行排序,则不需要完全扫描。

(SELECT "Review", id, datetime FROM Reviews ORDER BY datetime DESC LIMIT 10)
UNION 
(SELECT "People", id, datetime FROM PeopleFollows ORDER BY datetime DESC LIMIT 10)
ORDER BY datetime DESC
LIMIT 10

答案 1 :(得分:0)

您可以使用UNION,但查询不是最佳的:

(SELECT "Review", id FROM Reviews)
UNION
(SELECT "People", folowing_user_id FROM PeopleFollows)
ORDER BY datetime DESC
LIMIT 10

您无法在此查询中使用正确的索引,它将是fullscan。因此,使用它需要您自担风险。

更好的主意 - 不要尝试合并表。为此使用第三个缓存表。