簡體   English   中英

在MySQLi中使用5 INNER JOIN可以嗎?

[英]Is it okay to use 5 INNER JOIN in MySQLi?

我有6張桌子:

employee, contact, educ, employment, work, familybg eid是從employee表中獲取的foreign key 現在我無法在我的網頁之一上顯示結果file.php。 試圖做的是顯示從6個表中獲取的所有值,並將它們與INNER JOIN結合使用,作為與employee_id的關系,並帶有雇員的姓名和詳細信息。

查看查詢(盡管不是確切的列名):

file.php

 $sql=mysqli_query($db,"
SELECT cemp.eid
    , cemp.fname
    , cemp.mname
    , cemp.lname
    , cemp.age
    , cemp.gender
    , cemp.birthday
    , cemp.birthplace
    , cemp.citizenship
    , cemp.status
    , cemp.sss
    , cemp.philhealth
    , cemp.tin
    , cemp.height
    , cemp.weight
    , con.address
    , con.province
    , con.postcode
    , con.telno
    , con.mobile
    , ccon.email
    , ccon.alternate
    , ceduc.elem
    , ceduc.egrad
    , ceduc.high
    , ceduc.hgrad
    , ceduc.college
    , ceduc.cgrad
    , cems.position
    , cems.hireDate
    , cems.job_desc
    , cems.basic
    , cems.salary
    , cw.company_name
    , cw.position
    , cw.desc
    , cw.startDate
    , cw.endDate
    , cfam.fatherName
    , cfam.motherName
    , cfam.sibling
    , cfam.spouse
    , cfam.children 
 FROM ch_employee cemp 
INNER 
 JOIN contact ccon 
   ON ccon.eid = 'cemp.eid'
INNER 
 JOIN educ ceduc 
   ON ceduc.eid = 'cemp.eid' 
INNER 
 JOIN employment cems  
   ON cems.eid = 'cemp.eid'
INNER 
 JOIN work cw 
   ON cw.eid = 'cemp.eid'
INNER 
 JOIN family_bg cfam 
   ON cfam.eid = 'cemp.eid' 
WHERE cemp.eid = '$id';
");

while($row=mysqli_fetch_assoc($sql))的結果放在while($row=mysqli_fetch_assoc($sql))並將每列分配給我給定的變量名。 IG $name =$row['name'];...etc...etc ,以便於將結果輕松放在表中。 像這樣:

<table><tr><td><td><?php echo $name; ?></td></td><tr></table> <table><tr><td><td><?php echo $name; ?></td></td><tr></table>這就是我對其他其余列所做的操作,將它們放置在<table>標記中。

由於我有6個表,因此我分別創建了6個<table> ,其中包含每個數據庫表的所有列。 我給你看一個例子:

            <table>
            <thead>
            <tr>
            <th><strong>Name:</strong></th>
            <th><strong>Address:</strong></th>
            <th><strong>Contact#:</strong></th>
            <th><strong>Email:</strong></th>
            </tr>
            </thead>
            <tbody>
            <tr>
            <td><?php echo $name; ?></td>
            <td><?php echo $address; ?></td>
            <td><?php echo $contact; ?></td>
            <td><?php echo $email; ?></td>
            </tr>
            </tbody>

但是每次我運行此代碼時,都不會顯示任何結果。 好像我只做了一個空行。 現在想知道,是我使用INNER JOIN使該嘗試失敗了,還是因為我過度使用<table>標記影響了整個查詢? 另外,在我的情況下,我對mysqli_fetch_assoc()表示懷疑,這真的是我需要能夠顯示行嗎? 也許還有另外一個查詢函數供mysqli從中檢索database行? 哦,順便說一句,我已經嘗試過mysqli_fetch_array(),但即使這樣似乎也不起作用。

有任何想法嗎?

如果您發現每個INNER JOIN一次處理一次,並且每次都在一致的“ JOIN Link”中進行處理。 完成第一個INNER JOIN后,即ccon.eid=cemp.eid然后繼續進行到下一個ceduc.eid=cemp.eid但要確保所連接的表中的一個與上一個連接相同(有點像跟隨另一個的聯接。)因此您可以看到,由於表的數量將增加,因此所需表的構建時間也會增加。

注意 :1)在您的sql中,對於內部聯接,請不要使用ccon.eid='cemp.eid'使用ccon.eid=cemp.eid是您未獲得任何行的原因。對於每個內部聯接,請遵循相同的內容。

2)為安全起見,請使用左連接或右連接。 因為在內部聯接中,如果任何記錄不匹配,您將不會獲得任何輸出。

使用內部聯接時,所有映射都應具有其他值,否則將不會輸出。

如果給定行集,則嘗試將所有inner join更改為left join ,然后只有互斥映射可用。

因此,您的查詢將如下所示。

$sql=mysqli_query($db,"SELECT cemp.eid,cemp.fname,cemp.mname,cemp.lname,cemp.age,cemp.gender,cemp.birthday,cemp.birthplace,
cemp.citizenship,cemp.status,cemp.sss,cemp.philhealth,cemp.tin,cemp.height,cemp.weight,con.address,con.province,
con.postcode,con.telno,con.mobile,ccon.email,ccon.alternate,ceduc.elem,ceduc.egrad,ceduc.high,ceduc.hgrad,ceduc.college,ceduc.cgrad,
cems.position,cems.hireDate,cems.job_desc,cems.basic,cems.salary,cw.company_name,cw.position,cw.desc,cw.startDate,cw.endDate,
cfam.fatherName,cfam.motherName,cfam.sibling,cfam.spouse,cfam.children FROM ch_employee AS cemp 

LEFT JOIN contact AS ccon ON ccon.eid='cemp.eid'
LEFT JOIN educ AS ceduc ON ceduc.eid='cemp.eid' 
LEFT JOIN employment AS cems ON cems.eid='cemp.eid'
LEFT JOIN work AS cw ON cw.eid='cemp.eid'
LEFT JOIN family_bg AS cfam ON cfam.eid='cemp.eid' WHERE cemp.eid='$id'");

暫無
暫無

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

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