2012-03-12 56 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