2012-03-12 60 views
0

我有一个表:双mysql的查询请求

table_1 
id time 
1 2012-03-05 12:50:00 
2 2012-03-05 12:51:00 
3 2012-03-05 12:52:00 
4 2012-03-05 12:53:00 

table_2 
userid level 
100  1 
256  2 
112  3 
400  2 
15  1 

第一个请求:

$sql = 'SELECT `id`, `time` FROM table_1 WHERE `time` > NOW() ORDER BY `id` DESC LIMIT 1'; 

第二个请求:

$sql = 'SELECT COUNT(*) FROM table_2 WHERE `userid` = 100 LIMIT 1'; 

如何这两个请求合并成一个请求?

例如这个表:

id time    count 
1 2012-03-05 12:53:00 1 

或者

id time    count 
1 2012-03-05 12:53:00 0 

如果我们在TABLE_2 由于没有任何记录!

+0

你为什么要两个完全无关的问题开始与结合?寻找更好的表现? – 2012-03-12 11:56:27

+0

是的。更好的性能。 – user889349 2012-03-12 12:02:13

+0

这些表格不相关。 – user889349 2012-03-12 12:11:14

回答

0

既然他们没有任何关系,简单但是蛮力,我会这样做。不实际,但会做到这一点。

SELECT 
     `id`, 
     `time`, 
     (select COUNT(*) 
      FROM table_2 
      WHERE `userid` = 100) as UserCount 
    FROM 
     table_1 
    WHERE 
     `time` > NOW() 
    ORDER BY 
     `id` DESC 
    LIMIT 1 
+0

不确定这是否是上述要求,但只是一个说明,如果没有'时间'条目,它将不会返回结果(即不计数)NOW() – 2012-03-12 12:32:23

+0

@JoachimIsaksson,你是对的,但是在无论如何他们想要的情况下,他们可能会在任何一方不能返回一行时失败。但是,由于FIELD选择不能返回两列,所以我不得不放在另一列的前面。 – DRapp 2012-03-12 12:34:39

0

将两个非常简单,不相关的查询合并到一个更复杂的查询中并不是获得性能的最佳方法。你可能从可能轻微增加一个往返,但查询将很快变得无法维持。

相反,为了避免额外的往返时间,请使用类似mysqli::multi_query的东西将它们同时发送到数据库。这意味着您可以保持简单的查询,并且仍然只能往返数据库一次。

+0

想知道downvote,我很高兴被证明是错误的,但我想知道的不仅仅是有人不同意。 – 2012-03-12 12:57:29