0

我有两个表:'posts' 和 'users' 每个帖子都有一个 'ref_id' 列来获取发布它的用户 ID。

现在,我以这种方式收到帖子:

$this->db->query("SELECT * FROM posts WHERE time > '$timeLimit' LIMIT 50");

我不明白如何加入每个结果以获取海报相关数据。我现在正在做的基本上是一个循环内的循环,其中 foreach 的结果,获取他们的用户信息。但很明显这是非常错误的,

显然我需要开始使用连接,但是怎么做呢?我想这应该是一个非常简单的例子。

有什么帮助吗?谢谢你。

4

3 回答 3

1
SELECT posts.*, users.* 
FROM posts 
INNER JOIN users 
  ON posts.posted_by = users.id;
于 2013-02-10T10:12:35.283 回答
1

像这样:

SELECT
  posts.*,,
  users.Username
FROM posts
INNER JOIN users ON posts.ref_id = users.user_id;

解释:

对于JOIN任何一张桌子,有两件事;类型和JOIN连接条件。有三种主要的连接类型:

  • INNER JOIN,只有符合连接条件的行才会从两个表中返回,不再有行。但:

  • LEFT OUTER JOIN,当您连接两张表时,您将在 join 关键字的左侧看到一张,另一张在右侧:

    FROM Table1 <------------- 这是左表。LEFT OUTER JOIN table2 .... <------------- 这是正确的表。

LEFT OUTER JOIN左表中不匹配的行将包含在结果集中。

  • RIGHT OUTER JOIN右表中不匹配的行将包含在结果集中。

  • CROSS JOIN这将从两个表中执行笛卡尔积。

users在我们的查询中,只有当ref_id等于表中的user_id列时,查询才会从表中返回所有用户posts

更多信息和解释:

于 2013-02-10T10:12:54.753 回答
0
SELECT user.name
FROM users
INNER JOIN posts
ON posts.ref_id == user.id
AND posts.time > 50

http://www.w3schools.com/sql/sql_join_inner.asp

于 2013-02-10T10:14:52.110 回答