SQL查询仅返回3行

时间:2013-02-11 14:33:51

标签: php mysql

我有3个表,我想要它加入,所以我可以在HTML表格中显示其中的所有记录。

表格如下:

  1. laporan
  2. DOKTOR
  3. pesakit
  4. 我使用查询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 to doktor's id)
    • laporan_pesakit_id(FK to pesakit's id)

2 个答案:

答案 0 :(得分: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  

答案 1 :(得分: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