我的社交网络插件有一个非常大的问题。在我的PHP脚本中,我正在连接SQL Where查询,使用条件语句(if/else),因为使用相同的函数,我正在获取搜索栏和配置文件本身的帖子。
由于这个原因,我不能改变主语句。
我正在开发一个提及系统,就像Facebook一样:当一个用户在自己的个人资料上标记某人时,该帖子也应该显示在被标记的用户的个人资料上。
为了实现这一点,我正在编辑获取帖子的函数,但不知道如何编写查询。
让我们看看这个场景:
我有两个表,一个用于帖子,另一个用于链接到帖子表的提及。
表:posts (user_id是发布者,in_user_id是发布文章的配置文件)
+---------+----------+------------+------------+------------+
| post_id | user_id | in_user_id | in_group | updated_at |
+---------+----------+------------+------------+------------+
| 1 | 12 | 12 | 0 | some_text |
| 2 | 1 | 1 | 0 | some_text2 |
| 3 | 2 | 2 | 0 | some_text3 |
| 4 | 5 | 12 | 0 | some_text4 |
| 5 | 5 | 5 | 0 | some_text4 |
| 6 | 5 | 5 | 0 | some_text4 |
+---------+----------+------------+------------+------------+
表:posts_mentions (post_id是包含提及的post, user_id是被提及的用户)
+---------+----------+
| post_id | user_id |
+---------+----------+
| 2 | 12 |
| 3 | 12 |
| 6 | 1 |
+---------+----------+
我需要什么:我需要,当查看user_id 12的配置文件时,获得发布在12的配置文件(帖子)上的帖子的post_id。Post_id 1和4),还有标记了user_id 12的帖子(posts。Post_id 2和3),它们列在posts_mentions上。
What I tried:
实际的代码是这样的(这是一个例子):
$where="";
if($user_id->isFriend())
{
$where .= "WHERE (in_user_id = $user_id AND in_group = '0')";
}
...
$posts = $db->query(sprintf
("SELECT
*
FROM (SELECT posts.post_id
FROM posts ".$where.") posts
ORDER BY posts.post_id DESC");
(我使用子查询,因为否则我不能使用条件连接查询)
我试图在$where语句中添加另一个子查询,但它根本不起作用。
我真的要疯了。我该如何解决这个问题?
您可以添加一个子查询来从post_提及表中获取post_id
。比如:
$where .= "WHERE (in_user_id = $user_id AND in_group = '0')
OR post_id IN (
SELECT post_id FROM posts_mentions
WHERE user_id = $user_id
)
";