从数据库中获取用户喜欢的所有帖子

c90pui9n  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(252)

我正在尝试获取用户喜欢显示的所有帖子,而不是所有帖子。
我有如下数据库表:
likes(列(int):likeid,likeby,likeon)
文章(列:posted、postby、text、likecount)
用户(列:userid、username)
下面是我的代码,用于获取用户喜欢的帖子(目前它获取数据库中所有喜欢的帖子,而不是用户喜欢的帖子)

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);

关于如何获得用户喜欢的帖子而不是所有喜欢的帖子,有什么想法吗?

vd8tlhqk

vd8tlhqk1#

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数据库中试试吧。

inkz8wg9

inkz8wg92#

正如其他人在评论中所说的那样,您的模式没有以适当的方式构建表之间的牢固关系。
但是,考虑到您当前的结构(并且假设您正在更新likes计数,posts.postby包含用户id),您可以尝试以下操作:

SELECT posts.* FROM posts AS p WHERE COUNT(p.likeCount) > 0 AND p.postBy = the_user_id_variable

如果您只需要post,并且用户id包含在post行中,则不需要联接不同的表。

c3frrgcw

c3frrgcw3#

我想这会管用的。
我更改了您的查询,因此语句将返回post和like以及内部连接

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);
}

编辑:从查询中删除用户表,因为用户标识allready存在于like表(likeby)中。

相关问题