无法获得查询工作

时间:2012-10-18 14:44:06

标签: php mysql sql mysqli

我有一个包含3个表(member,boat,boatType)的数据库,在下面的方法中,其中两个受到影响。我想要的是列出在会员上注册的所有船只,但是代码存在问题(至少使用SQL,但我怀疑不是全部)。

提前致谢。

boatHandler.php:

public function GetMembersBoats($memberId) {

    $query = "SELECT b.boatId, b.length, bt.type
                  FROM boat AS b
                      INNER JOIN member AS m
                          ON b.memberId = m.memberId
                              WHERE m.memberId = ?
                      INNER JOIN boatType AS bt
                          ON b.boatTypeId = bt.boatTypeId
                      GROUP BY b.boatId";

    $stmt = $this->m_db->Prepare($query);
    $stmt->bind_param('i', $memberId);

    $boats = $this->m_db->GetBoats($stmt);
}

database.php中:

public function GetBoats($stmt) {
    $boats = array(
            0 => array(),
            1 => array(),
            2 => array()
        );

    $stmt->execute();

    $stmt->bind_result($boatId, $length, $type);

    while ($stmt->fetch()) {
        array_push($boats[0], $boatId);
        array_push($boats[1], $length);
        array_push($boats[2], $type);
    }

    $stmt->Close();

    return $boats;
}

受影响的表格:

  • boat: boatId,boatTypeId,length,memberId
  • boatType: boatTypeId,键入

2 个答案:

答案 0 :(得分:2)

必须在表引用后列出WHERE子句。您必须在WHERE m.memberId = ?FROM之后将JOIN移到表格引用的末尾,如下所示:

SELECT b.boatId, b.length, bt.type
FROM boat AS b
      INNER JOIN member AS m
          ON b.memberId = m.memberId

      INNER JOIN boatType AS bt
          ON b.boatTypeId = bt.boatTypeId
WHERE m.memberId = ?
GROUP BY b.boatId

答案 1 :(得分:1)

当你在on子句中时,只需将'where'替换为'and':

SELECT b.boatId, b.length, bt.type
              FROM boat AS b
                  INNER JOIN member AS m
                      ON b.memberId = m.memberId
                          AND m.memberId = ?
                  INNER JOIN boatType AS bt
                      ON b.boatTypeId = bt.boatTypeId
                  GROUP BY b.boatId