我有两张桌子。第一个表包含简单的用户数据,并具有列
$username, $text, $image
(这称为“USERDATA”)。
第二个表保存有关哪些用户“关注”其他用户的信息,这些用户使用列
进行设置$username and $usertheyfollow
(这称为“FOLLOWS”)。
我需要做的是分别向每个用户显示数据,使其与他们相关。这意味着例如,userABC需要能够查看他/她所关注的所有用户的$text
和$image
输入。为此,我认为我需要编写一个sql查询,其中包括首先检查登录用户是谁(在本例中为userABC),然后在表FOLLOWS上选择具有相应值{的所有$usertheyfollow
实例。 {1}}然后,我需要返回到我的"userABC."
表,然后选择USERDATA
和$text
,其对应值为$image
。然后我可以使用echo命令等显示它......
我该如何编写这个SQL查询?我是否正确地采用数据库架构?
答案 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);