2013-02-11 110 views
0

我有3个表,我希望它加入,所以我可以显示它在HTML表中的所有记录。SQL查询只返回3行

的表如下所示:

  1. laporan
  2. DOKTOR
  3. pesakit

我使用的查询SELECT * FROM laporan NATURAL JOIN doktor NATURAL JOIN pesakit;加入所有表。

我在laporan表中输入5条记录,因为它只是指doktorpesakit为外键。我也用phpmyadmin查询工具来显示这个查询的记录。

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

编辑:

这是表的代码看起来像:

<?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>"; 

?> 

数据库结构如下:

DOKTOR:

  • ID( PK)
  • doktor_nama

pesakit:

  • ID(PK)
  • pesakit_nama

laporan:

  • ID(PK)
  • laporan_tarikh
  • laporan_doktor_id(FK到DOKTOR的id)
  • laporan_pesakit_id(FK到pesakit的id)
+5

不知道你的表的结构,我们不能帮你。你已经使用了“懒惰”的连接语法,并且简单地假设mysql可以读懂你的想法并找出哪些字段应该用于连接。显然它不工作。 – 2013-02-11 14:35:48

+0

不知道什么是错的,它可能到处都是。也许分享一些关于你如何展示这些东西的内部信息? – 2013-02-11 14:36:28

+0

@MarcB我不知道应该在我的例子中使用哪个查询来使其工作。 – AimanB 2013-02-11 14:57:04

回答

3

除了向查询添加列以外,INNER JOINS还可以排除行。如果您希望查询返回五行并且只有三行,那么我怀疑表laporan表中的两行的键在两个引用表中都是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 
+0

好的建议。我没有考虑过。 – neelsg 2013-02-11 15:14:59

+0

非常感谢。这已经解决了这个问题:) – AimanB 2013-02-11 15:52:15

1

,您应该使用INNER JOIN,而不是自然科学JOIN这样的:

SELECT * FROM laporan 
    INNER JOIN doktor ON laporan.laporan_doktor_id = doktor.id 
    INNER JOIN pesakit ON laporan.laporan_pesakit_id = pesakit.id 
+0

谢谢。这应该给我更多的知识,如何不同的联接工作:) – AimanB 2013-02-11 15:52:53