在 SQL 中连接两个表的正确方法是什么?


What is the correct way to join two tables in SQL?

我有两个表。 第一个表包含简单的用户数据,并具有列

$username, $text, $image 

(这称为"用户数据"(。

第二个表包含有关哪些用户"关注"其他用户的信息,这些信息由列设置

$username and $usertheyfollow 

(这称为"跟随"(。

我需要做的是单独向每个用户显示数据,以便与他们相关。 这意味着用户ABC需要能够查看他/她关注的所有用户的$text$image输入。 为此,我认为我需要编写一个 sql 查询,该查询涉及首先检查登录用户是谁(在本例中为 userABC(,然后选择表 FOLLOW 上具有相应值的所有 $usertheyfollow 实例 "userABC."然后我需要返回我的 USERDATA 表并选择具有相应值 $usertheyfollow$text$image。 然后我可以使用 echo 命令或类似的东西来显示它......

我将如何编写此 SQL 查询? 我甚至以正确的方式进行数据库架构吗?

使用如下表:

userdata

 ______________________________
| id | username | text | image |
|------------------------------|
| 1  | jam      | text | image |
+------------------------------+
| 2  | sarah    | text | image |
+------------------------------+
| 3  | tom      | text | image |
+------------------------------+

follows

 _____________________
| userId | userFollow |
|---------------------|
|   1    |     2      |
+---------------------+
|   1    |     3      |
+---------------------+

并使用以下 SQL:

SELECT userdata.text, userdata.image FROM follows LEFT JOIN userdata ON follows.userFollow = userdata.id WHERE follows.userId = 1

将获取ID 为"1"的用户遵循的所有文本和图像

事实证明,这两个答案都不正确。 @jam6459是最接近的。

正确答案如下:

SELECT userdata.text, userdata.image, follows.userFollow
  FROM userdata
  LEFT JOIN follows ON follows.userFollow = userdata.username
  WHERE follows.userId = $username

我还发现,在 jam 的表格示例中,没有与 ID 对应的用户名更容易。 这是因为同一个用户在"用户数据"中可以有多个条目。 我改用用户名作为 ID。

function get_text_image($username)
{
     $sql = "SELECT * FROM USERDATA where username='".$username."'";  
     $result = mysql_query($sql);
     while($row = mysql_fetch_array($result))
     {
         echo $row['text'];
         echo $row['image'];
     }
}

function display_data_of_followers($userid)
{
     $sql = "SELECT usertheyfollow FROM follow WHERE userid = ".$userid."";
     $result = mysql_query($sql);
     while($row = mysql_fetch_array($result))
     {
          get_text_image($row['usertheyfollow']);
     }
}
display_data_of_followers($userid);