php - 在 MySQLi 中使用 5 INNER JOIN 可以吗?

标签 php mysql mysqli

我有 6 张 table :

employee, contact, educ, employment, work, familybg开斋节是foreign key取自employee table 。现在在我的网页之一 file.php 上显示结果时遇到问题。我想要做的是显示从 6 个表中每个表中获取的所有值,并使用 INNER JOIN 将它们组合在一起。作为与 employee_id 的关系,其中包含员工的姓名和最少详细信息。

查看查询(尽管不是确切的列名称):

文件.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))下并将每一列分配给我给定的变量名称。 I.G $name =$row['name'];...etc...etc让我可以轻松地将结果放在 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() 感到怀疑,这真的是我需要能够显示行的吗?或者也许还有另一个查询函数 mysqlidatabase 检索行除此之外?哦,顺便说一句,我已经尝试过 mysqli_fetch_array() 但即使这样似乎也不起作用。

有什么想法吗?

最佳答案

当使用内部联接时,所有映射都应该有值,否则它不会给出输出。

尝试将所有内连接更改为左连接(如果它给出行集),则仅存在互斥映射可用。

因此您的查询将如下所示。

$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'");

关于php - 在 MySQLi 中使用 5 INNER JOIN 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25736344/

相关文章:

javascript - 如何根据输入字段动态更改网页内容

php - 为什么 mysql_num_rows 对于空表上的 SELECT 返回 1?

php - 在 Laravel 中将数据库克隆为不同的名称

php - 获取 SQL 语句以选择我想要的项目的问题

php - 将用户 Gmail 联系人导入到我的网站并向他们的所有联系人发送邀请

php - 如何在 laravel 中按自定义时间格式排序?

php - 在一个字段中存储多个值

mysql - Sql 将十六进制日期转换为 mysql varchar(date)

php - 多个php版本,无法连接mysqli

php - 如何使用 Mysql If 函数来评估日期时间列?