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

时间:2012-05-02 16:07:34

标签: php mysql sql

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

$username, $text, $image 

(这称为“USERDATA”)。

第二个表保存有关哪些用户“关注”其他用户的信息,这些用户使用列

进行设置
$username and $usertheyfollow 

(这称为“FOLLOWS”)。

我需要做的是分别向每个用户显示数据,使其与他们相关。这意味着例如,userABC需要能够查看他/她所关注的所有用户的$text$image输入。为此,我认为我需要编写一个sql查询,其中包括首先检查登录用户是谁(在本例中为userABC),然后在表FOLLOWS上选择具有相应值{的所有$usertheyfollow实例。 {1}}然后,我需要返回到我的"userABC."表,然后选择USERDATA$text,其对应值为$image。然后我可以使用echo命令等显示它......

我该如何编写这个SQL查询?我是否正确地采用数据库架构?

3 个答案:

答案 0 :(得分:2)

使用这样的表:

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”的用户的所有文本和图像

答案 1 :(得分: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相对应更容易。这是因为同一个用户可以在“USERDATA”中有多个条目。我改用username作为Id。

答案 2 :(得分:-1)

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);