Php Mysql如何连接2个表和1个表本身
我有一个表名Php Mysql如何连接2个表和1个表本身,php,mysql,Php,Mysql,我有一个表名tbl\u user此表包含 db_uid db_fname db_lname db_responsibleid db_email 1 xxx yyy 0 xxx@x.com 2 ttt eee 1 ttt@x.com 3 ggg hhh 2
tbl\u user
此表包含
db_uid db_fname db_lname db_responsibleid db_email
1 xxx yyy 0 xxx@x.com
2 ttt eee 1 ttt@x.com
3 ggg hhh 2 ggg@x.com
另一个表是tbl_task
此表包含
db_taskid db_mytask db_desc db_status db_emailed db_userid
1 test test Done 0 2
2 bnvc sdcs Done 0 3
3 bcv sdc Scheduled 0 3
现在我想得到这个结果:
taskid mytask desc Status staffname responsiblename remail
1 test test Done ttt eee xxx yyy xxx@x.com
2 bnvc sdcs Done ggg hhh ttt eee ttt$x.com
taskid mytask desc Status staffname responsiblename remail
1 test test Done ttt eee NULL NULL
2 bnvc sdcs Done ggg hhh NULL NULL
此结果用于选择具有db\u status='Done'
和db\u emailed='0'的所有任务。
用户姓名和该用户的负责人姓名以及负责人的电子邮件
我使用此查询,但无法获取负责人的姓名和电子邮件地址
select
tbl_task.db_mytask,
tbl_task.db_desc,
tbl_task.db_taskid,
tbl_task.db_status,
concat(tbl_user.db_fname,' ' ,tbl_user.db_lname) as name,
concat(user.db_fname,' ' ,user.db_lname) as uname,
user.db_email
from tbl_task
left join tbl_user
on tbl_task.db_userid=tbl_user.db_uid
left join tbl_user as user
on user.db_uid=user.db_responsibleid
where
(tbl_task.db_emailed='0')
and
(tbl_task.db_status='Done')
当前结果为:
taskid mytask desc Status staffname responsiblename remail
1 test test Done ttt eee xxx yyy xxx@x.com
2 bnvc sdcs Done ggg hhh ttt eee ttt$x.com
taskid mytask desc Status staffname responsiblename remail
1 test test Done ttt eee NULL NULL
2 bnvc sdcs Done ggg hhh NULL NULL
我如何解决这个问题?有什么建议或帮助吗 您在第二个左连接上连接了错误的列(我在tbl_用户上使用了user1和use2别名) 您使用的是
user.db\u uid=user.db\u responsibleid
,但应该tbl\u user.db\u uid=user.db\u responsibleid
select
tbl_task.db_mytask,
tbl_task.db_desc,
tbl_task.db_taskid,
tbl_task.db_status,
concat(user1.db_fname,' ' ,user1.db_lname) as name,
concat(user2.db_fname,' ' ,user2.db_lname) as uname,
user2.db_email
from tbl_task
left join tbl_user as user1 on tbl_task.db_userid=user1.db_uid
left join tbl_user as user2 on user2.db_uid=user1.db_responsibleid
where tbl_task.db_emailed='0'
and tbl_task.db_status='Done'
您可以尝试此查询。
检查它是否符合您的要求
select
tbl_task.db_taskid,
tbl_task.db_mytask as mytask,
tbl_task.db_desc,
tbl_task.db_status,
concat(tbl_user.db_fname,' ' ,tbl_user.db_lname) as name,
concat(users.db_fname,' ' ,users.db_lname) as responsiblename,
users.db_email as remail
from tbl_user AS users
RIGHT OUTER JOIN tbl_user ON users.db_uid = tbl_user.db_responsibleid
RIGHT OUTER JOIN tbl_task ON tbl_user.db_uid = tbl_task.db_userid
where (tbl_task.db_emailed='0') and (tbl_task.db_status='Done')
我在上面发布了与我当前结果相同的结果。我没有更新负责人的姓名和他的电子邮件回复。。第二个左联接上的反向联接表