php - 获取多对多表中的所有数据

标签 php mysql many-to-many

我不明白...我有一个包含 3 个头衔的标题表 - 经理-秘书-队长。一位用户可以拥有多个头衔。这就是我所做的...

'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;
    }
}

最佳答案

改用左连接:

'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';

关于php - 获取多对多表中的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32181177/

相关文章:

php - 显示谷歌地图坐标在ajax中不起作用

php - 如何在 Laravel 中划分读/写数据库设置?

PHP 从数据库中以逗号分隔的字符串形式导出值

c# - 如何通过从另一个表单调用它来将数据库中的数据显示到另一个表单

具有外键和与同一模型的多对多关系的 Django 模型

php - 数据未插入数据库

mysql - Solr - 模式帮助(产品属性)

mysql - 尽管 key 正确,但仍获取 "Cannot add foreign key constraint"

java - Hibernate ManyToMany 更新错误

mysql - 使用数据透视表的 Laravel Eloquent 多对多关系