【问题标题】:Joined table not returning any results加入的表不返回任何结果
【发布时间】:2020-02-25 10:18:44
【问题描述】:

我成功地在我的代码的另一部分加入了表格,所以我遵循了相同的模式,但这次它没有返回任何结果,我不明白为什么。

这是我要加入的表格:

- 角色

| id |  type  |
+----+--------+
|  1 | admin  |
|  2 | author |
|  3 | member |
+----+--------+

- 用户

+----+----------+-------+----------+-------------------+--------+
| id | username | email | password |      role_id      | status |
+----+----------+-------+----------+-------------------+--------+
|    |          |       |          | 3 (default value) |        |
+----+----------+-------+----------+-------------------+--------+

这是请求:

public function get_users()
{
    $users_list = $this->dbh->query('SELECT users.id, roles.id AS roleid, type, role_id, id, username FROM users LEFT JOIN roles ON users.role_id = roles.id ORDER BY id ASC');
    return $users_list;
} 

【问题讨论】:

  • 试试看:$users_list = $this->dbh->query('SELECT * FROM users AS users LEFT JOIN roles AS roles ON users.id = roles.id ORDER BY id ASC');
  • 它仍然没有显示任何结果。这是我遵循SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; 的模式,但我想我打错了什么,我会再检查一遍

标签: php sql join


【解决方案1】:

由于两个表都有id列,所以需要<table_name>.id指定哪个表引用

public function get_users()
{
    $users_list = $this->dbh->query('SELECT users.id AS userid, roles.id AS roleid, type, role_id, username FROM users LEFT JOIN roles ON users.role_id = roles.id ORDER BY users.id ASC');
    return $users_list;
} 

【讨论】:

  • 对不起,我不得不意外离开。您的解决方案有效!感谢您的帮助,我会牢记这一点。
  • @CharlèneC,不客气。如果您不介意,请您也投票给我的答案吗?谢谢^_^
【解决方案2】:

SQL应该是

SELECT  
    u.id, 
    r.id AS roleid, 
    u.type,
    r.username
FROM users u
    LEFT JOIN roles r ON r.id = u.role_id
ORDER BY u.id ASC 

我已经省略了您在 sql 中定义的一些列,因为我根本看不出它们的意义所在。不仅如此,它们还可能看起来模棱两可。

例如:

SELECT 
    users.id,             // User ID
    roles.id AS roleid,   // Role ID
    type,                 // User type
    role_id,              // Role ID (We already have it, no need for it again)
    id,                   // What ID? This is ambiguous and will fail 
    username              // User Username

【讨论】:

  • 我尝试了你的解决方案,但它仍然返回一个空白页我明白你对模棱两可的列的意思,我会先重新处理
  • @CharlèneC 在连接中从多个表中进行选择时,您应该始终为您想要使用该表的列添加前缀,这样可以避免此问题。不仅如此,您还可以确切地知道数据来自哪个表
【解决方案3】:

这样试试

public function get_users()
    {
        $users_list = $this->dbh->query('SELECT u.id AS userid, r.id AS roleid, r.type, u.role_id, u.username FROM users as u LEFT JOIN roles as r ON u.role_id = r.id ORDER BY u.id ASC');
        return $users_list;
    } 

【讨论】:

  • 发生了什么变化?答案是什么?
猜你喜欢
  • 1970-01-01
  • 2017-12-28
  • 2017-12-09
  • 2020-10-03
  • 2017-03-19
  • 2017-05-20
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多