我正在尝试获取用户喜欢显示的所有帖子,而不是所有帖子。
我有如下数据库表:
点赞(列(整数):likeID,likeBy,likeOn)
帖子(列:postID,postBy,文本,likeCount)
用户(列:userID,用户名)
这是我的代码,用于获取用户喜欢的帖子(此刻它获取数据库中所有喜欢的帖子,而不是用户喜欢的帖子)
public function likes($user_id, $num){
$stmt = $this->pdo->prepare("SELECT * FROM `likes`, `posts`, `users` WHERE `likeOn` = `userID` and `user_id` = `postBy` ORDER BY `likeOn` DESC");
$stmt->bindParam(":num", $num, PDO::PARAM_INT);
$stmt->execute();
$tweets = $stmt->fetchAll(PDO::FETCH_OBJ);
关于如何获得用户喜欢的帖子而不是所有喜欢的帖子的任何想法?
答案 0 :(得分:0)
正如其他人在评论中说的那样,您的架构没有以适当的方式进行结构化以使表之间具有牢固的关系。
但是,考虑到您当前的结构(并假设您正在更新喜欢计数,并且posts.postBy包含用户ID),您可以尝试执行以下操作:
SELECT posts.* FROM posts AS p WHERE COUNT(p.likeCount) > 0 AND p.postBy = the_user_id_variable
如果仅需要发布,并且userId包含在发布行内,则无需联接其他表。
答案 1 :(得分:0)
我认为这会起作用。
我更改了您的查询,因此该语句将返回帖子和点赞以及内部联接
public function likes($user_id, $num){
$stmt = $this->pdo->prepare("SELECT * likes INNER JOIN posts ON likes.likeOn = posts.postID WHERE likes.likeBy = ? ORDER BY `likeOn` DESC");
$stmt->bind_param("i",$user_id);
$stmt->bindParam(":num", $num, PDO::PARAM_INT); // Don't know what this does
$stmt->execute();
$tweets = $stmt->fetchAll(PDO::FETCH_OBJ);
}
编辑:因为用户ID已存在于like表(likeBy)中,因此从查询中删除了User表。
答案 2 :(得分:0)
select p.postID from posts p inner join likes l on l.likeOn=p.postID inner join users u on u.userID = l.likeBy;
我认为上面的查询将为您工作,在MySQL数据库中尝试一下。