0

我有 3 个表,我希望它加入,这样我就可以在 HTML 表中显示其中的所有记录。

表格如下:

  1. 拉波兰
  2. 医生
  3. 比萨基

我使用查询SELECT * FROM laporan NATURAL JOIN doktor NATURAL JOIN pesakit;来连接所有表。

我在laporan表中输入了 5 条记录,因为它只引用doktorpesakit作为外键。我还使用 phpmyadmin 查询工具来显示此查询的记录。

问题是,当我使用该查询时,在这 5 条记录中,只能显示 3 条。有什么问题?mysql_fetch_array()php代码中的没有任何问题。

编辑:

表格代码如下所示:

<?php
        $result = mysql_query("SELECT * FROM laporan NATURAL JOIN doktor NATURAL JOIN pesakit;");

        $i = 1;

        while($row = mysql_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $i++ . "</td>";
            echo "<td>" . $row['doktor_nama'] . "</td>";
            echo "<td>" . $row['pesakit_nama'] . "</td>";
            echo "<td>" . $row['laporan_tarikh'] . "</td>";
            echo "</tr>";
        }


        echo "</tbody>
        </table>";

?>

数据库结构如下:

医生:

  • 身份证(PK)
  • 医生名字

比萨基特:

  • 身份证(PK)
  • pesakit_nama

拉波兰:

  • 身份证(PK)
  • laporan_tarikh
  • laporan_doktor_id (FK to doktor's id)
  • laporan_pesakit_id (FK 到 pesakit 的 id)
4

2 回答 2

3

除了向查询中添加列之外,还要INNER JOINS消除行。如果您期望您的查询返回五行并且只得到三行,我怀疑您的laporan表中的两行在两个参考表中具有 NULL 或非 NULL 的键。

因此,请尝试LEFT OUTER JOIN改用,如下所示:

SELECT lap.*
     , d.doktor_nama
     , p.pesakit_nama
FROM laporan lap
LEFT OUTER JOIN doktor d
   on lap.aporan_doktor_id =d.ID  
LEFT OUTER JOIN pesakit p
   on lap.laporan_pesakit_id =p.ID  
于 2013-02-11T15:05:50.770 回答
1

您应该像这样使用 INNER JOIN 而不是 NATURAL JOIN:

SELECT * FROM laporan
    INNER JOIN doktor ON laporan.laporan_doktor_id = doktor.id
    INNER JOIN pesakit ON laporan.laporan_pesakit_id = pesakit.id
于 2013-02-11T15:03:22.720 回答