Выберите конкретную строку с дополнительным столбцом, значение которого соответствует другому столбцу в одной таблице - PullRequest
0 голосов
/ 18 сентября 2018

Предположим, у меня есть таблица с именем users, состоящая из столбцов: user_id, user_name, user_created_by.

+------------------+----------------------+-------------------+
|    user_id       +      user_name       +  user_created_by  +
+------------------+----------------------+-------------------+
|        1         |        John          |         1         |
|        2         |        Ann           |         1         |
|        3         |        Paul          |         2         |
|        4         |        King          |         2         |
|        5         |        Dirk          |         3         |
+------------------+----------------------+-------------------+

Значение user_created_by - это user_id, создавший эту запись.Теперь я хочу сделать запрос, который приводит к одной конкретной строке с добавленным столбцом, скажем, user_created_by_name, что является user_name из user_id из user_created_by.Предположим, мы хотим получить запись "Paul" о том, кто (имя) создал ее (временный новый столбец).Для простоты понимания это мой ожидаемый результат:

+----------+--------------+-------------------+------------------------+
| user_id  |   user_name  |  user_created_by  |  user_created_by_name  |
+----------+--------------+-------------------+------------------------+
|    3     |     Paul     |        2          |          Ann           |
+----------+--------------+-------------------+------------------------+

это мой запрос с использованием codeigniter:

$query=$this->db->query("SELECT *, 
                           (SELECT user_name FROM users WHERE user_id = user_created_by) 
                              AS "user_created_by_name" FROM users WHERE user_id=3);

Но мой результат:

+----------+--------------+-------------------+------------------------+
| user_id  |   user_name  |  user_created_by  |  user_created_by_name  |
+----------+--------------+-------------------+------------------------+
|    3     |     Paul     |        2          |         NULL           |
+----------+--------------+-------------------+------------------------+

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Вы можете использовать самообъединение (два раза объединять одну и ту же таблицу), используя псевдоним для fere к таблицам как разные наборы данных

SELECT a.user_id, a.user_name, a.user_created_by, b.user_name as user_created_by_name
from users a 
inner join user b on a.user_created_by = b.user_id 
where a.user_id  = 3 
0 голосов
/ 18 сентября 2018

Это будет работать:

SELECT a.user_id as User_id, 
    a.user_name as Name, 
    b.user_id as Created_by_user_id, 
    b.user_name as Created_by_name
FROM users AS a
INNER JOIN users AS b
ON a.user_id = b.user_created_by
WHERE a.user_id = 3

Это называется самосоединением, которое используется при объединении двух записей одной таблицы.

0 голосов
/ 18 сентября 2018

Вы можете решить эту проблему, используя JOIN .

$sql = "SELECT users.user_id, users.user_name,  user_created_by_name.user_name,
        FROM users JOIN users AS user_created_by_name ON users.user_id = user_created_by_name.user_id WHERE users.user_id = 3";

$query=$this->db->query($sql);

Если у вас есть пользователи, которые не были созданы другим пользователем, используйте LEFT JOIN :

$sql = "SELECT users.user_id, users.user_name, user_created_by_name.user_name,
        FROM users LEFT JOIN users AS user_created_by_name ON users.user_id = users.user_id WHERE user_created_by_name.user_id = 3";

$query=$this->db->query($sql);
0 голосов
/ 18 сентября 2018

использовать самостоятельное соединение

 select u1.user_id, u1.name as user_name,
 u2.user_created_by        
,u2.user_name as createdby  from users u1
 join users u2 on u1.user_id=u2.user_created_by   
 where u1.user_id=3    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...