0

3 つのテーブルがあり、それを結合して、テーブル内のすべてのレコードを HTML テーブルに表示できるようにします。

表は次のとおりです。

  1. ラポラン
  2. 医者
  3. ペサキット

クエリを使用してSELECT * FROM laporan NATURAL JOIN doktor NATURAL JOIN pesakit;すべてのテーブルを結合しました。

外部キーとしてlaporanのみ参照するため、表doktorに5 つのレコードを入力しました。pesakitまた、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>";

?>

データベース構造は次のとおりです。

医師:

  • ID (PK)
  • doktor_nama

ペサキット:

  • ID (PK)
  • ペサキットナマ

ラポラン:

  • ID (PK)
  • laporan_tarikh
  • laporan_doktor_id (医師の ID への FK)
  • laporan_pesakit_id (pesakit の id への FK)
4

2 に答える 2

3

クエリに列を追加するだけでなく、INNER JOINS行を削除します。クエリが 5 行を返すことを期待していて、3 行しか取得していない場合は、ラポランテーブルの 2 つの行が NULL であるか、2 つの参照テーブルにないキーを持っていると思われます。

したがって、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

次のように、NATURAL JOIN の代わりに INNER 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 に答える