Php mysql连接两个表
我很困惑如何用两个外键连接这些表Php mysql连接两个表,php,mysql,join,Php,Mysql,Join,我很困惑如何用两个外键连接这些表 table user: id_u* f_name l_name ---------------------- 1 andi mitchel 2 sarah bench 3 kirsty larx table voucher: id_v* id_user id_target 1 1 2 2 2 3 在循环中回响。。。什么也不返回
table user:
id_u* f_name l_name
----------------------
1 andi mitchel
2 sarah bench
3 kirsty larx
table voucher:
id_v* id_user id_target
1 1 2
2 2 3
在循环中回响。。。什么也不返回
$db->query("SELECT * FROM voucher v
LEFT JOIN user u ON u.id_u = v.id_user
LEFT JOIN user u1 ON u1.id_u = v.id_target
WHERE .... ")
那么:
在id\u user=id\u上选择*从凭证加入用户
while($r = $q->fetch_array(MYSQLI_ASSOC)) :
echo $r['u.f_name'];
echo $r['u1.f_name'];
endwhile;
更简单的是:
从凭证中选择*用户,其中id_user=id_您似乎在询问凭证表中的所有人员,无论他们是处于位置1用户还是位置2目标。。。然后,显示那个人的名字
while($r = $q->fetch_array(MYSQLI_ASSOC)) :
echo $r['u.f_name'];
echo $r['u1.f_name'];
endwhile;
此查询对每个可能的人员及其职位依据进行预查询
SELECT * FROM voucher v
LEFT JOIN user u ON u.id_u = v.id_user OR u.id_u = v.id_target
WHERE ....
如果您只需要给定人员的一个实例,而不管其位置如何,只需删除WhatPosition引用的所有实例
SELECT STRAIGHT_JOIN
AllVoucherUsers.WhatPosition,
u.*
FROM
( select distinct
v.id_user,
'1' as WhatPosition
from voucher v
union select distinct
v.id_target as id_user,
'2' as WhatPosition
from voucher v
) AllVoucherUsers
join users u
on AllVoucherUsres.id_user = u.id_u
你的加入似乎完全正确。唯一的问题是您已经加入了表用户两次,因此您的列具有与f_name相同的名称。数据库将为这些列指定不同但任意的名称。您可以使用AS关键字覆盖此行为:
然后:
我想你可以用内连接代替左连接。除非您的id\u user或id\u target值引用了不存在的userid id\u。他想解析id\u user和id\u target都是不同的用户。我尝试了那个,但仍然没有返回任何结果。我如何回显id_user和id_target user的结果呢?@这是上面的查询。我想回显id_user和id_target的名称,这两个不同的用户:
$db->query("SELECT v.*
, u.f_name AS user_f_name
, u.l_name AS user_l_name
, ta.f_name AS target_f_name
, ta.l_name AS target_l_name
FROM voucher v
LEFT JOIN user u ON u.id_u = v.id_user
LEFT JOIN user ta ON ta.id_u = v.id_target
WHERE .... ")
while($r = $q->fetch_array(MYSQLI_ASSOC)) :
echo $r['user_f_name'];
echo $r['target_f_name'];
endwhile;