2016-01-12 2 views
0

У меня в настоящее время возникает проблема, когда я не могу связать 3 отдельные таблицы SQL. Ниже приведены соответствующие биты разных таблиц.PHP SQL: выбор полей из трех таблиц, которые не взаимосвязаны

Comments 
commentID userID staffID comment comment_date 
     52 1037  0 sadsadsa 2016-01-12 
     54  0 1050 asda  2016-01-12 

Users 
userID first_name last_name 
    1036 Janet  Ang  
    1037 glenn  tan  

Staffs 
staffID staffName 
    1001 Ling Ling 
    1011 Lee Ming 
    1003 Joyce  
    1010 Titus  
    1008 Vivian  
    1005 Vincent 
    1006 Alex  
    1046 Glenn  
    1047 Glenn2  
    1048 glennjr2 
    1049 glenn3  
    1050 glenn4 

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

SELECT comments.comment, users.first_name, users.last_name, staffs.staffName, comments.comment_date 
         FROM comments 
         INNER JOIN users 
         on comments.userID = users.userID 
         LEFT OUTER JOIN staffs 
         on comments.staffID = staffs.staffID 
         WHERE comments.videoID = $vid_id 

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

+1

использовать левое соединение в обоих, если значение не существует в другой таблице, как пользователь и персонала, то он будет возвращать нуль в относительное поле –

+0

Насколько я вижу, использование INNER JOIN в обоих должно работать. –

+0

@Baruchel, попытался выполнить запрос, результатов не было. –

ответ

1

Вы можете использовать INNER JOIN для обеих таблиц (users,staffs) с comments таблицей:

Пример:

SELECT comments.comment, users.first_name, users.last_name, staffs.staffName, comments.comment_date 
FROM comments 
INNER JOIN users ON comments.userID = users.userID 
INNER JOIN staffs ON comments.staffID = staffs.staffID 
WHERE comments.videoID = $vid_id 

После этого вы получите два результата, один для users и один для staffs.

Если вам нужны все пользователи и сотрудники либо comments, либо вы можете использовать LEFT JOIN с тем же запросом.

+0

Исправьте меня, если я ошибаюсь, но для внутреннего соединения, чтобы работать правильно, все три таблицы должны иметь общее поле, не так ли? В настоящее время таблица сотрудников связана с таблицей комментариев через staffID, а таблица пользователей связана с таблицей комментариев через userID, но у меня нет общей области между сотрудниками, пользователями и комментариями. –

+0

@JunJie: таблица комментариев - ваша таблица моста, чем не нужно добавлять отношение, u уже может получить отношение из таблицы комментариев. – devpro

+0

@JunJie: это просто предложение, создать единую таблицу для персонала и пользователей, а также категории с user_type (user = 1, staff = 2) ... просто предложение, не связанное с вашим вопросом. – devpro

1

Вы можете использовать операцию UNION:

Пример:

(SELECT comments.comment, CONCAT(users.first_name, " ", users.last_name) as name, comments.comment_date, "User" as type 
 
FROM comments, users 
 
WHERE comments.userID = users.userID 
 
    AND comments.videoID = $vid_id) 
 

 
UNION 
 

 
(SELECT comments.comment, CONCAT(staffs.staffName) as name, comments.comment_date, "Staff" as type 
 
FROM comments, staffs 
 
WHERE comments.staffID = staffs.staffID 
 
    AND comments.videoID = $vid_id)

Смежные вопросы