从多个表中获取所有数据

时间:2015-08-24 11:26:32

标签: php mysql many-to-many

我不明白......我有一个包含3个标题的标题表 - Manager - Secretary - Captain。用户可以拥有多个标题。所以这就是我做的......

'SELECT u.*, t.*, ut.*
 FROM users u               
      JOIN user_title ut
       ON ut.user_id = u.id
      JOIN titles t
       ON ut.title_id = t.id
  WHERE u.id = 7';

现在,当我在phpMyAdmin中运行它时,此功能正常,显示分配给user.id 7的所有3个标题。但是,当我在我的IDE(通过php)中使用它时,我只返回'Manager',这是第一个数据行。已经有一个星期了,我相信我会失去理智。有什么建议? 这是我的实际代码...

 public function validateLogin($email, $pass, $title){
    global $dbh;

    $sql = 'SELECT u.*, p.*, t.*, ut.*
            FROM passwords p
                JOIN users u
                    ON p.user_id = u.id
                JOIN user_title ut
                    ON ut.user_id = u.id
                JOIN titles t
                    ON ut.title_id = t.id        
            WHERE u.email = :email AND p.password = :pass';               

    $stmt = $dbh->prepare($sql);

    $stmt->execute(['email'=>$email, 'pass'=> md5($pass . $this->getSalt())]);
    $data = $stmt->fetch();

    if($stmt->rowCount()>0){
        $stmt->closeCursor();
        $_SESSION['user']['title'] = $title;
        $_SESSION['user']['loggedin'] = true;
        $_SESSION['user']['name'] = $data['first_name'];
        return true;
    }else{
        $_SESSION['user']['loggedin'] = false;
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

改为使用左连接:

'SELECT u.*, t.*, ut.*
 FROM users u               
      LEFT JOIN user_title ut
       ON ut.user_id = u.id
       LEFT JOIN titles t
        ON ut.title_id = t.id
  WHERE u.id = 7';