MySQL - Querying for names for a different table corresponding to their ids

47 Views Asked by At

I need to get names of from and to users to display messages.

I have two tables one user table

CREATE TABLE IF NOT EXISTS USERS(
 USER_ID INT UNSIGNED NOT NULL,
 USER_EMAILID VARCHAR(100) CHARACTER SET 'latin1' COLLATE 'latin1_bin' NOT NULL, 
 USER_FIRST_NAME VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, 
 USER_LAST_NAME VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
 PRIMARY KEY (USER_ID),
 INDEX idx_USER_CONFIG_id2 (USER_EMAILID ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;

and Email table

CREATE TABLE IF NOT EXISTS EMAIL (
  MAIL_ID TINYINT UNSIGNED NOT NULL, 
  FROM_ADD INT UNSIGNED NOT NULL,
  TO_ADD INT UNSIGNED DEFAULT NULL,
  EMAIL_SUBJECT VARCHAR(75) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' DEFAULT NULL,
  MESSAGE TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' DEFAULT NULL, 
  PRIMARY KEY (MAIL_NO)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;

I need to query for emails for a particular user and below is what I have enter image description here while doing so I also need to bring their names as well. How can I achieve this?

EDIT: (query provided by OP in comment)

SELECT B.TO_ADD, B.FROM_ADD, A.USER_FIRST_NAME, B.MESSAGE
FROM EMAIL B LEFT JOIN
     USERS A
     ON (A.USER_ID = B.FROM_ADD OR A.USER_ID = B.TO_ADD)
ORDER BY A.USER_FIRST_NAME DESC; 
1

There are 1 best solutions below

8
On BEST ANSWER

I think you just want two left joins:

SELECT e.TO_ADD, e.FROM_ADD, ufrom.USER_FIRST_NAME, uto.USER_FIRST_NAME, e.MESSAGE
FROM EMAIL e LEFT JOIN
     USERS ufrom
     ON ufrom.USER_ID = e.FROM_ADD LEFT JOIN
     USERS uto
     ON uto.USER_ID = e.TO_ADD
ORDER BY ufrom.USER_FIRST_NAME DESC;