0

3つのテーブル(member、boat、boatType)を含むデータベースがあり、以下のメソッドでは2つが影響を受けます。メンバーに登録されているすべてのボートを一覧表示したいのですが、コードに問題があります(少なくとも、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;
}

影響を受けるテーブル:

  • ボート: boatId、boatTypeId、length、memberId
  • boatType: boatTypeId、タイプ
4

2 に答える 2

2

WHERE句は、テーブル参照の後にリストする必要があります。次のように、とのWHERE m.memberId = ?後に、 をテーブル参照の最後に移動する必要があります。FROMJOIN

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
于 2012-10-18T14:45:34.710 に答える
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
于 2012-10-18T14:48:07.970 に答える