2013-02-11 1 views
0

У меня есть 3 таблицы, и я хочу, чтобы они присоединились, чтобы я мог отображать все записи в нем в таблице HTML.SQL-запрос возвращает только 3 строки

таблицы следующим образом:

  1. laporan
  2. Doktor
  3. pesakit

Я использовал запрос SELECT * FROM laporan NATURAL JOIN doktor NATURAL JOIN pesakit; соединить все таблицы.

Я ввел 5 записей в таблице laporan, потому что это только ссылки doktor и pesakit как внешние ключи. Я также использовал инструмент запросов phpmyadmin для отображения записей с этим запросом.

Проблема, когда я использую этот запрос среди этих 5 записей, может отображаться только 3. В чем проблема? Не было ничего плохого в mysql_fetch_array() в php-коде.

EDIT:

Это как кодовая таблица выглядит следующим образом:

<?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:

  • идентификатор (ПК)
  • doktor_nama

pesakit:

  • идентификатор (ПК)
  • pesakit_nama

laporan:

  • ID (PK)
  • laporan_tarikh
  • laporan_doktor_id (FK для DOKTOR идентификационному)
  • laporan_pesakit_id (FK к идентификатору pesakit в)
+5

, не зная структуру таблиц, мы не можем вам помочь. вы прошли с «ленивым» синтаксисом соединения и просто предполагаете, что mysql может читать ваши мысли и определять, какие поля следует использовать для объединений. Очевидно, что это не работает. –

+0

Не знаю, что не так, это может быть везде. возможно, поделитесь информацией о том, как вы показываете материал? –

+0

@MarcB Я понятия не имею, какой вопрос следует использовать в моем случае, чтобы заставить его работать. – AimanB

ответ

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

+0

Большое спасибо. Это устранило проблему :) – AimanB

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 
+0

Спасибо. Это должно дать мне больше знаний о том, как работают разные Joins :) – AimanB

Смежные вопросы