【发布时间】:2023-03-24 13:18:01
【问题描述】:
我正在创建一个社交网络。我想让用户能够订阅人。理论上,当用户单击订阅按钮时,PHP 会将该用户的 ID 添加到 MYSQL 列表中“订阅”列下的数组中。现在,我想要一个新闻提要风格的主页。我想知道,如果我通过 PHP 提取“订阅”数据,我怎么能只显示用户订阅的人的帖子(也在 MYSQL 表中)?
【问题讨论】:
-
你能告诉我们相关表的架构吗?
我正在创建一个社交网络。我想让用户能够订阅人。理论上,当用户单击订阅按钮时,PHP 会将该用户的 ID 添加到 MYSQL 列表中“订阅”列下的数组中。现在,我想要一个新闻提要风格的主页。我想知道,如果我通过 PHP 提取“订阅”数据,我怎么能只显示用户订阅的人的帖子(也在 MYSQL 表中)?
【问题讨论】:
使用 UNION 将不同表中的所有帖子合并,然后使用“IN”子句根据当前用户 ID 获取您要关注的所有用户 ID:
例子:
$userFavs = "SELECT userID FROM favs WHERE followerID = '#loggedinUserID#'"
mysql_query("SELECT 'wall' as type, body, date FROM wall WHERE userID IN ($userFavs)
UNION
SELECT 'photo' as type, caption, date FROM photos WHERE userID IN ($userFavs) UNION... etc
ORDER BY date DESC");
如果您通过 mysql_fetch_array() 运行查询,它将返回如下内容:
Array => {
[0] => { type = "wall", body = "This is a wall update", date = "1234567890" },
[1] => { type = "photo", caption = "Us at the beach", date = "..." },
...
}
您需要确保每次调用“UNION”时每个 SELECT 语句中的列数都相同,否则将无法正常工作。你可以 /fake/ 列,就像我对上面的 type 列所做的那样。
【讨论】:
$userFavs = "SELECT userID FROM favs WHERE followerID = '#loggedinUserID#'" mysql_query("SELECT 'wall' as type, body, date FROM wall WHERE userID IN ($userFavs) ORDER BY date DESC");