dongzhuang6247 2011-04-25 10:59
浏览 46
已采纳

mysql加入两个表

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

quite confused how to join those table with two foreign keys

$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 .... ")

echoing while loop... and returns nothing??

while($r = $q->fetch_array(MYSQLI_ASSOC)) :
   echo  $r['u.f_name'];
   echo  $r['u1.f_name'];
endwhile;
  • 写回答

4条回答 默认 最新

  • dongpin1059 2011-04-25 14:00
    关注

    Your JOIN seems absolutely correct. The only issue is that you have joined table user twice, therefore you have columns with same name (like f_name). The database will assign different (but arbitrary) names to these columns. You can override this behaviour with the AS keyword:

    $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 .... ")
    

    Then:

    while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       echo  $r['user_f_name'];
       echo  $r['target_f_name'];
    endwhile;
    

    And I think you can replace the LEFT JOINs with (inner) JOINs. Unless you have id_user or id_target values referencing non-existing userids (id_u).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器