【问题标题】:Get posts of a thread and 0 or 1 if the user asking liked the post如果用户询问喜欢帖子,则获取线程的帖子和 0 或 1
【发布时间】:2013-08-10 09:41:09
【问题描述】:

我再一次向你询问有关 mysql 的问题,这绝对不是我最好的技能。其实,似乎也不是很复杂。这是我的简化方案,我有两张表,一张用于发帖,另一张用于发帖:

表格 post_forum 结构

id     thread    post   likes   user_id    created    

表 likes_to_post 结构

id     post_id   user_id   created

这是我从 $start 到 $next 获取帖子 $thread_id 的查询:

 $query = "SELECT 
                post_forum.id,
                post_forum.user_id,
                post_forum.post, 
                post_forum.likes,
                post_forum.created 
            FROM post_forum 
            WHERE post_forum.thread ='{$thread_id}' 
            ORDER BY post_forum.id DESC LIMIT $start,$next";

我想做的是获取每个帖子,01 字段的值,表示用户 $user_id 是否喜欢每个帖子,$user_id 是询问帖子的用户的 ID ,如果可能的话,在一个查询中。 提前非常感谢,任何帮助表示赞赏。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您需要这样的查询:

    SELECT p.id, CASE WHEN l.id IS NULL THEN 0 ELSE 1
    FROM post_forum p
    LEFT JOIN likes_to_post l
      ON l.post_id = p.id
      AND l.user_id = ?
    

    这确实假设您将 PDO 与参数化查询一起使用。该查询将用户 ID 作为其唯一参数。

    【讨论】:

      【解决方案2】:
      $query = "SELECT 
                  a.id,
                  a.user_id,
                  a.post, 
                  a.likes,
                  a.created,
                  IF(b.user_id IS NOT NULL,1,0)
              FROM post_forum a
              LEFT JOIN likes_to_post b
                  ON b.user_id=$user_id AND a.id = b.post_id
              WHERE a.thread ='{$thread_id}' 
              ORDER BY a.id DESC LIMIT $start,$next";
      

      这是查询:如果喜欢则返回1,如果不喜欢则返回0
      但是您应该使用mysqliPDO 来防止安全攻击

      编辑
      Mysqli 示例(我不确定thread_id,我想它是一个数字):

      $query = "SELECT 
              a.id,
              a.user_id,
              a.post, 
              a.likes,
              a.created,
              IF(b.user_id IS NOT NULL,1,0)
          FROM post_forum a
          LEFT JOIN likes_to_post b
              ON b.user_id=? AND a.id=b.post_id
          WHERE a.thread ='{?}' 
          ORDER BY a.id DESC LIMIT ?,?";
      //Connect to datatabase
      $mysqli = new mysqli($Hostname, $Username, $Password, $DatabaseName);
      $stmt = $mysqli->stmt_init();
      $stmt->prepare($query);
          $stmt->bind_param('iiii', $user_id,$thread_id,$start,$next)
              $stmt->execute()
                  $stmt->store_result();
                  $result = $stmt->bind_result($id, $user_id, $post, $likes, $created,$liked);
                  if($stmt->num_rows>0){
                      while (mysqli_stmt_fetch($stmt)) {
                          [Do something]
                      }
                  }
      

      【讨论】:

      • 似乎有一些遗漏,我添加了 ON b.user_id=$user_id AND a.id = b.post_id 并完美运行:)
      猜你喜欢
      • 2020-11-04
      • 2022-01-16
      • 1970-01-01
      • 2018-07-27
      • 2021-01-27
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多