0

SQL で使用すると内部結合が機能しますが、それを PHP の関数に統合しようとすると、「予期しない」(T_ENCAPSED_AND_WHITESPACE) という構文エラーが発生し、識別子 (T_STRING) または変数 (T_VARIABLE) が必要です。番号 (T_NUM_STRING)". コードは次のとおりです。

echo "<table border=='1'>
<tr>
<th>Name</th>   
<th>Exam Date</th>
<th>Level</th>
<th>Mark</th>
    <th>Style</th>

</tr>";

while($row = mysql_fetch_array($exam_recordation))
  {
  echo "<tr>";
$name_query = mysql_query("SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <> $row['Student_email']");
  while($row = mysql_fetch_array($name_query))
  {
    echo "<td>" . $row['name'] . "</td>";
  }
  echo "<td>" . $row['examDate'] . "</td>";
  echo "<td>" . $row['level'] . "</td>";
  echo "<td>" . $row['mark'] . "</td>";
      echo "<td>" . $row['style'] . "</td>";

  echo "</tr>";
  }
echo "</table>";

そこに内部結合がある理由は、通過するレコードごとに $exam_recordation からの Student_email が必要だからです。$exam recordation は、設定された条件を満たした試験テーブルからのすべてのレコードを保持します。私自身の調査から、クエリのネストは最善の方法ではないことがわかりました。クエリをネストしているとは思いませんが、whileループをネストしているため、疑わしい危険/悪い習慣に見えます。この種の機能/操作を実行する方法を私が知っている唯一の方法です。

私が必要としている助けは、内部結合をその関数に入れる方法を考え出すことです。内部結合は、最初の while ループが通過する各レコードの各電子メールについて、学生テーブルから名前を取得し、それをエコーし​​ます。

4

2 に答える 2

0

基本的な PHP 構文: 二重引用符で囲まれた文字列内の配列キーは、それ自体を引用符で囲むことはできません。例えば

$arr = "This is an $array['reference']."
                          ^--       ^-- incorrect

次のいずれかである必要があります。

$arr = "This is an {$array['reference']}."; // note the {} notation
or
$arr = "This is an $array[reference]."; // Note lack of quotes. 
于 2013-05-01T19:42:06.980 に答える
0

始める前に、mysql_ が正式に廃止されたことに注意してください。mysqli または pdo に進む必要があります。

当初意図した前にwhileループを閉じている可能性があります...以下のコメントを参照してください

 while($row = mysql_fetch_array($name_query))
 {
   echo "<td>" . $row['name'] . "</td>";
 } << REMOVE THIS 
 echo "<td>" . $row['examDate'] . "</td>"; << PHP NO LONGER KNOWS ABOUT $row
 echo "<td>" . $row['level'] . "</td>";
 echo "<td>" . $row['mark'] . "</td>";
    echo "<td>" . $row['style'] . "</td>";

 echo "</tr>";
 }

また、PHP がクエリ変数を置換できることを確認することもできます。MySQL は、比較を行うためにテキスト文字列を引用符で囲む必要もあります。クエリの連結を次のように変更してみてください...

$name_query = mysql_query("SELECT DISTINCT student.name
          FROM student
          INNER JOIN exam ON student.email = exam.Student_email
          WHERE student.email <> '{$row['Student_email']}'");
于 2013-05-01T19:36:32.443 に答える