Присоединенная таблица не возвращает никаких результатов - PullRequest
0 голосов
/ 25 февраля 2020

Я успешно соединил таблицы в другой части своего кода, поэтому я следовал тому же шаблону, но на этот раз он не возвращает никакого результата, и я не понимаю, почему.

Вот таблицы, к которым я пытаюсь присоединиться:

- роли

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

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

Поскольку обе таблицы имеют столбец идентификатора, необходимо указать, на какую таблицу ссылается <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;
} 
0 голосов
/ 25 февраля 2020

Попробуйте вот так

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;
    } 
0 голосов
/ 25 февраля 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...