如何在一个表中连接两个包含多行的表?

时间:2013-02-26 09:40:55

标签: php mysql sql

让我说我有:

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. 选择*用户
  2. 选择每个用户的所有匹配
  3. 有没有办法将结果作为一个单独的查询得到,而不是像这样经历每一个?

4 个答案:

答案 0 :(得分:3)

使用左外连接,从左表(主)中检索所有记录,并从右表中检索其他匹配。

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

答案 1 :(得分:0)

是的,您可以使用JOIN

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

您的结果将以平面数组形式出现,但您可以轻松地循环并相应地格式化数组。

答案 2 :(得分:0)

你需要的sql语句只是使用INNER JOIN或LEFT JOIN,如果你想要返回记录,即使某个用户在表命中没有匹配的记录

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

查询的结果是一维数组,因此您需要在应用程序级别格式化结果。

要进一步了解联接,请访问以下链接:

答案 3 :(得分:0)

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