获取所有帖子并发布用户喜欢的MySQL

时间:2016-12-13 11:19:21

标签: php mysql sql request

我正在试图在帖子旁边找到所有帖子和一个“喜欢”的变量,以检查用户是否喜欢它。

我有三张论文:

-posts

+----+---------+---------+
| id | user_id |   text  |
+----+---------+---------+

-votes

+----+-----------+---------+---------+
| id | type_vote | user_id | post_id |
+----+-----------+---------+---------+

-users

+---------+---------+
| id_user | etc..   |
+---------+---------+

我检查其他人的答案,但它没有解决我的问题。我也尝试了这段代码:

SELECT id, text,
            IF('$uid' IN (SELECT id FROM votes WHERE user_id='$uid'), 1, 0) AS liked
            FROM posts
            INNER JOIN users
            ON users.id_user = posts.user_id
            WHERE posts.user_id = '$uid' OR posts.user_id 
        ORDER BY posts.created_at desc

但它只返回用户创建的帖子,而且喜欢的变量不起作用..

我错过了什么?

提前致谢!

编辑:

我设法获得相应帖子旁边的投票ID,如果为NULL则如何将其转换为0,如果id存在则将其转换为1?

SELECT p.*,(SELECT id from votes where user_id = '$uid' AND post_id = p.id) as liked from posts p

我得到的结果如下:

    +----+------+---------+---------------+
    | id | text | user_id |liked          |
    +----+------+---------+-----+---------+
    | 1  | blab | 5476zef |NULL OR post_id|
    +----+------+---------+---------------+

2 个答案:

答案 0 :(得分:0)

我不确定"喜欢"之间的关系。和"投票"。但是,如果您想要所有帖子和其他信息,则会想到left join或相关子查询。

我认为这可能是你想要的:

select p.*
       (exists (select 1
                from votes v
                where v.post_id = p.id and v.user_id = $uid
               )
       ) as user_flag
from p;

type_vote上可能还有一些条件,但您的问题并未解释该字段的使用方式。

答案 1 :(得分:0)

您还可以使用if条件:

IF(liked IS NULL,0,1)

您可以添加列,也可以将喜欢替换为您的表达式。