我正在尝试获取所有帖子和帖子旁边的变量“喜欢”,以检查用户是否喜欢它。
我有三张 table ,上面有论文:
-帖子
+----+---------+---------+
| id | user_id | text |
+----+---------+---------+
-投票
+----+-----------+---------+---------+
| id | type_vote | user_id | post_id |
+----+-----------+---------+---------+
-用户
+---------+---------+
| 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
但它仅返回用户创建的帖子,并且 Like 变量不起作用..
我错过了什么?
提前致谢!
编辑:
我设法获取相应帖子旁边的投票 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|
+----+------+---------+---------------+
最佳答案
我不确定“喜欢”和“投票”之间的关系。但是,如果您想要所有帖子和附加信息,那么就会想到左连接
或相关子查询。
我想这可能就是你想要的:
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
上也可能有一些条件,但您的问题没有解释如何使用该字段。
关于php - 获取所有帖子并发布用户喜欢的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119806/