2013-02-26 48 views
3

比方說,我有:如何在一個表中連接兩個包含多行的表?

USERS: 
userid | name 
1  | John 
2  | Jack 

HITS: 
id | userid | time 
1 | 1  | 50 
2 | 1  | 51 
3 | 2  | 52 
4 | 1  | 53 
5 | 2  | 54 
6 | 2  | 55 

我需要這樣的結構,以結束:

array() { 
    [user 1] { 
    hit 1 => 50 
    hit 2 => 51 
    hit 4 => 53 
    } 
    [user 2] { 
    hit 3 => 52 
    hit 5 => 54 
    hit 6 => 55 
    } 
} 

以最壞的方式做到這一點是:

  1. SELECT *用戶
  2. 爲每個用戶選擇所有匹配

有沒有辦法得到一個結果作爲一個單一的查詢而不通過每個像這樣?

+0

是的,這是一個非常簡單的加入。我希望看到您嘗試過的代碼。 – Rikesh 2013-02-26 09:42:18

+0

我覺得我不清楚,這就是爲什麼它很簡單。我想知道如何結束與一個用戶,並在每個命中下面作爲一個查詢的一部分。 – coderama 2013-02-26 09:54:00

回答

3

使用左外連接,檢索所有的左表中的記錄(主)和其他匹配從右表

select 
users.userid, 
h.time 
from 
users 
    left outer join hits h 
    on( 
     users.userid = h.userid 
    ) 
0

是的,你可以使用JOIN這個。

SELECT * FROM users 
INNER JOIN hits on users.id = hits.user_id 

您的結果將作爲平面陣列來通過,但您可以輕鬆地循環並相應地格式化您的數組。

0

您需要的SQL語句是簡單地使用INNER JOIN或LEFT JOIN如果歐想返回記錄即使某用戶沒有匹配的記錄表上打

SELECT a.*, b.time 
FROM users a 
     INNER JOIN hits b 
      ON a.userid = b.userid 

查詢的結果是一個單維數組,因此您需要在應用程序級別中格式化結果。

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

0
SELECT * FROM users 
LEFT JOIN hits on users.id = hits.user_id 
+0

介紹給你的代碼唯一的答案添加一些文字說明? – alestanis 2013-02-26 10:04:06