Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Mysql get result from same table with two id columns

I have two tables:

select * From user;
+---------+---------+-----------+-------------+
| user_id | role_id | name      | city        |
+---------+---------+-----------+-------------+
|       1 |       1 | aaa       | NULL        |
|       2 |       6 | bbb       | NULL        |
|       3 |       6 | ccc       | NULL        |
|       4 |       2 | ddd       | NULL        |
|       5 |       3 | eee       | NULL        |
|      10 |       6 | fff       | NULL        |
|      22 |       3 | ggg       | NULL        |
+---------+---------+-----------+-------------+

select * From user_log;
+--------+---------+------------------------+---------------------+------------+
| log_id | user_id | action                 | changed_date        | updated_by |
+--------+---------+------------------------+---------------------+------------+
|      1 |       4 | Changed ddd's city     | 2022-06-26 07:59:23 |          1 |
|      2 |      22 | Changed ggg's name     | 2022-06-26 08:08:06 |          5 |
|      3 |      10 | Changed fff's name     | 2022-06-26 10:19:26 |          4 |
|      4 |      10 | Changed fff's city     | 2022-06-26 10:19:26 |          4 |
|      6 |      10 | Changed fff's city     | 2022-06-26 10:20:30 |          1 |
+--------+---------+------------------------+---------------------+------------+

Look at the user_id and updated_by columns in user_log table. For those two columns, I use same user_id from user table.

Now I need to get a result with both user’s name which are related to those two ids.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

This is the result I need.

+-------------+---------------+---------------------+---------------------+-----------------+-------------------+
| log_user_id | log_user_name | action              | changed_date        | updated_user_id | updated_user_name |
+-------------+---------------+---------------------+---------------------+-----------------+-------------------+
|           4 | ddd           | Changed ddd's city  | 2022-06-26 07:59:23 |               1 | aaa               |
|          22 | ggg           | Changed ggg's name  | 2022-06-26 08:08:06 |               5 | eee               |
|          10 | fff           | Changed fff's name  | 2022-06-26 10:19:26 |               4 | ddd               |
|          10 | fff           | Changed fff's city  | 2022-06-26 10:19:26 |               4 | ddd               |
|          10 | fff           | Changed fff's city  | 2022-06-26 10:20:30 |               1 | aaa               |
+-------------+---------------+---------------------+---------------------+-----------------+-------------------+

I tried it something like this. But it gives same name for both name columns.

SELECT u.user_id as log_user_id
     , u.name as log_user_name 
     , action
     , changed_date
     , u.updated_by as updated_user_id 
     , updated_user_name 
FROM user u 
  JOIN (
    SELECT u.user_id
         , u.name as updated_user_name
         , action
         , DATE_FORMAT(l.changed_date,'%Y-%m-%d') as changed_date
    FROM user u 
      JOIN user_log l ON l.updated_by = u.user_id
  ) s USING (user_id) 

Hope somebody may help me to figure this out.

>Solution :

It would appear you just need to join the user table twice, once for each User_Id

select l.user_id as log_user_id,
  lu.name as log_user_name, 
  l.action, 
  date_format(l.changed_date,'%Y-%m-%d') as changed_date,
  l.updated_by as updated_user_id, 
  uu.name as updated_user_name
from user_log l
join user lu on lu.user_id = l.log_user_id
join user uu on uu.user_id = l.updated_by;
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading