在PHP中连接条件查询,同时尝试从多个表中获取行


Concatenating conditionally queries in PHP, while trying to get rows from multiple tables

我的社交网络插件有一个非常大的问题。在我的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
    )
";