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

时间:2018-10-26 10:00:51

标签: php mysql database

我正在尝试获取用户喜欢显示的所有帖子,而不是所有帖子。

我有如下数据库表:

点赞(列(整数):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);

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

3 个答案:

答案 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数据库中尝试一下。