Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql连接两个表_Php_Mysql_Join - Fatal编程技术网

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;