Mysql 将多对多选择添加到现有查询中

Mysql 将多对多选择添加到现有查询中,mysql,select,many-to-many,Mysql,Select,Many To Many,我设置了一个查询来返回一个用户给另一个用户的评论 现在,我们希望能够对这些评论进行评级 我添加了一个新表,它有3个字段:comment\u id、user\u id和score 我如何为获取的任何注释获取{user_id,score}数组 在获取注释并运行第二个查询后,我是否需要循环浏览注释?这种方法可能会导致添加几个额外的查询 可以用一个查询完成吗 以下是我现在拥有的功能: function getAllComments($args) { if(empty($_SESSION['user'

我设置了一个查询来返回一个用户给另一个用户的评论

现在,我们希望能够对这些评论进行评级

我添加了一个新表,它有3个字段:comment\u id、user\u id和score

我如何为获取的任何注释获取{user_id,score}数组

在获取注释并运行第二个查询后,我是否需要循环浏览注释?这种方法可能会导致添加几个额外的查询

可以用一个查询完成吗

以下是我现在拥有的功能:

function getAllComments($args) {
  if(empty($_SESSION['user']['id'])) return false;
  $limit = 5;
  if(isset($args['limit'])) $limit = $args['limit'];
  $page = 1;
  if(isset($args['page'])) $page = $args['page'];
  $data = array();
  $offset = ($page-1)*$limit;

  $sql = "SELECT c.*,CONCAT(u1.firstName,' ',u1.lastName) AS owner,u1.title AS ownerTitle,CONCAT_WS(' ',u2.firstName,u2.lastName) AS senderName,u2.title AS senderTitle,a.name AS actionName,a.behavior 
    FROM comment AS c 
    JOIN user AS u1 ON c.recipient = u1.id
    JOIN user AS u2 ON c.sender = u2.id
    JOIN action AS a ON c.action = a.id
    WHERE c.type=1";

  if(isset($args['location'])) $sql .= " AND u1.location=?";
  $sql .= " ORDER BY date DESC";
  $sql .= " LIMIT ?";
  $sql .= " OFFSET ?";

  try {
    $db = DB::getInstance();
    $stmt = $db->dbh->prepare($sql);
    $n = 1;
    //THESE MUST STAY IN THE SAME ORDER TO MATCH THE ? PLACEHOLDERS
    if(isset($args['location'])) $stmt->bindValue(($n++), $args['location'], PDO::PARAM_INT);
    $stmt->bindValue(($n++), $limit, PDO::PARAM_INT);
    $stmt->bindValue(($n++), $offset, PDO::PARAM_INT);
    $result = $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $rows = array();

    if($result !== false) {
      while($row = $stmt->fetch()) {
        $rows[] = $row;
      }
      $data['comments'] = $rows;
      return $data;
    }else {
      logit('Query Failed');
      return false;
    }
  }catch(PDOException $e) {
    logit($e->getMessage());
    return false;
  }
}

例如,如果您想要与用户5的注释关联的所有{comment\u id,user\u id,score},那么您的查询将涉及一个内部连接,看起来像:

SELECT s.comment_id, s.user_id, s.score FROM CommentScore s
INNER JOIN Comment c
ON c.comment_id = s.comment_id
WHERE c.user_id = 5