让我说我有:
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
}
}
最糟糕的方法是:
有没有办法将结果作为一个单独的查询得到,而不是像这样经历每一个?
答案 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