2013-03-12 5 views
0

Я не могу получить значения из разных таблиц с помощью внутреннего соединения, вывод всегда ничего не извлекает. Также нет сообщения об ошибке, и я не могу определить, что было неправильно в моем коде .. Может ли кто-то помочь? Я был бы очень признателен. Вот часть моего кода.Извлечение значений из разных таблиц через внутреннее соединение

<?php 
    $con=mysql_connect("localhost","root",""); 
    mysql_select_db("student_records",$con); 
    if(isset($_COOKIE['username'])) 
    { 
     if($_COOKIE['username']!='admin') 
     { 
      $tbl6=mysql_query("SELECT A.LName, A.FName, A.MName, B.YearLevel 
      FROM student as A INNER JOIN stud_course as B ON A.StudNo=B.StudNo INNER JOIN course as C ON B.CourseCode=C.CourseCode INNER JOIN religion as D ON A.ReligionID=D.ReligionID 
      WHERE A.StudNo = '".mysql_real_escape_string($_COOKIE['username'])."' "); 
      while($row=mysql_fetch_array($tbl6)) 
      { 
       echo "<td>".$row['LName']."</td><td>".$row['FName']."</td><td>".$row['MName']."</td><td>".$row['Course']."</td><td>".$row['YearLevel']."</td><td>".$row['EAdd']."</td><td>".$row['ReligionName']."</td></tr>"; 

      } 
     } 
    } 
    ?> 
+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). –

+0

ТАКЖЕ, НЕ ТИПА В КАПС. ЭТО ОНЛАЙН-ВЕРСИЯ ОБУВИ. –

+0

@JohnConde - У вас есть этот комментарий, который где-то сохранился, вырезать и вставить? –

ответ

2

Внутренние соединения требуют наличия данных в обеих таблицах, включенных в соединение. В вашем случае, у вас есть четыре таблицы, и любой из этих таблиц может отсутствовать соответствующие данные:

SELECT A.LName, A.FName, A.MName, B.YearLevel, C.Course 
FROM student as A 
INNER JOIN stud_course as B ON 
    A.StudNo=B.StudNo 
INNER JOIN course as C ON 
    B.CourseCode=C.CourseCode 
INNER JOIN religion as D ON A.ReligionID=D.ReligionID 
WHERE A.StudNo = '".mysql_real_escape_string($_COOKIE['username'])."' " 
  • Если нет записи в student таблице с StudNo равным имени пользователя печенье, вы не получайте данных.
  • Если у ученика нет записей в таблице stud_course, вы не получите никаких данных.
  • Если CourseCode в stud_course не существует в таблице course, данных не будет.
  • Если учащийся ReligionID имеет значение null или имеет религию, которой нет в таблице religion, данных не будет.

Я хотел бы предложить разорвать SQL на более мелкие куски (или, возможно переключение каждого INNER JOIN к LEFT OUTER JOIN) для отладки и выяснить, где проблема.

Обратите внимание, что вы должны обязательно добавить Course и Eadd (не уверены, какие таблицы) из вашего списка выбора, если вы собираетесь его использовать.

+2

Следует также отметить, что лично мне не нравятся таблицы псевдонимов. Я чувствую, что яснее, если я использую имя таблицы во всем SQL. Но это только я. –

+0

Большое спасибо. Я собираюсь попробовать то, что вы предложили. :) – kdot

+0

есть сообщение об ошибке, которое сообщает, что индекс не определен и указывает на эту строку .. echo «». $ Row ['LName']. "". $ Row ['FName']. " "$ строки [ 'MName']." "$ строки [ 'курс']." "$ строки [ 'YearLevel']."». $ строки [ 'EAdd']. "". $ Row ['ReligionName']. ""; – kdot

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