我正在试图在帖子旁边找到所有帖子和一个“喜欢”的变量,以检查用户是否喜欢它。
我有三张论文:
-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|
+----+------+---------+---------------+
答案 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)
您可以添加列,也可以将喜欢替换为您的表达式。