3

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

$username, $text, $image 

(这称为“用户数据”)。

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

$username and $usertheyfollow 

(这称为“跟随”)。

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

我将如何编写这个 SQL 查询?我是否以正确的方式讨论数据库架构?

4

3 回答 3

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

于 2012-05-02T16:18:27.137 回答
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”中有多个条目。我改为使用用户名作为 ID。

于 2012-05-03T00:56:42.407 回答
-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);
于 2012-05-02T16:34:18.623 回答