簡體   English   中英

mysql加入兩個表

[英]mysql joining two table

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

回聲while循環...並且什么都不返回?

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

你的JOIN似乎絕對正確。 唯一的問題是您已經連接了兩次表user ,因此您有相同名稱的列(如f_name )。 數據庫將為這些列分配不同(但任意)的名稱。 您可以使用AS關鍵字覆蓋此行為:

$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;

我認為你可以用(內部) JOIN替換LEFT JOIN 除非您有id_userid_target值引用不存在的id_uid_u )。

您似乎要求所有在憑證表中的人,無論他們處於位置1(用戶)還是位置2(目標)......然后,顯示該人的姓名。

此查詢對每個可能的人及其位置基礎(通過WhichPosition)進行預查詢。

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

如果你只想要一個給定人的一個實例 - 無論他們的位置如何,只需刪除所有“WhatPosition”引用的實例......

SELECT STRAIGHT_JOIN
      u.*
   FROM
      ( select distinct 
              v.id_user
           from voucher v
        union select distinct
             v.id_target as id_user
           from voucher v
      ) AllVoucherUsers
      join users u
         on AllVoucherUsres.id_user = u.id_u
SELECT * FROM voucher v 
    LEFT JOIN user u ON u.id_u = v.id_user OR u.id_u = v.id_target
    WHERE .... 

怎么樣:SELECT * FROM憑證JOIN用戶ON id_user = id_u

更簡單:

SELECT * FROM憑證,用戶WHERE id_user = id_u

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM