0

2 つのデータベースがあります。1 つ目は、アップロード文書のリストと、アップロードされたときの対象者、および有効期限が含まれています。これは、implode を使用する人の各等級を表す数値として格納されます。そのため、列名「foagrade」の行 1 には 10,11,12 が含まれます。2 番目のデータベースは成績のリストで、10 = マネージャー、11 = HR などの ID があります。左結合と基本的な html テーブルを使用してクエリを表示しています。

$result = mysqli_query($con,
"SELECT UPLOAD.id, UPLOAD.title, UPLOAD.faoGrade,UPLOAD.faoLocation, UPLOAD.date,   UPLOAD.expiry, GRADE.ID, GRADE.GRADE as GR, GRADE.id
FROM UPLOAD
LEFT JOIN GRADE ON
UPLOAD.faoGrade=GRADE.ID
where owner=$user");
echo "<table id='previous'>
<tr>
<th>Title/Document name:</th>
<th>For attention of Grade</th>
<th>For Location</th>
<th>date</th>
<th>Date expires</th>
<th>Delete this briefing</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  $id=$row['id'];
  echo "<tr>";
  echo "<td>" . $row['title'] . "</td>";
  echo "<td>" . $row['GR'] . "</td>";
  echo "<td>" . $row['foaLocation']."</td>";
  echo "<td>" . date("D, d M Y ",($row['date']));
  echo "<td>" . date("D, d M Y ",($row['expiry']));
  echo "<td><a href=pages/login/upload_delete.php?item=".$id.">delete</a></td> ";
  echo "</tr>";
  }
echo "</table>";

クエリはすべての詳細を表示しますが、11 または 12 ではなく、列 faograde (MANAGER) に格納されている最初のグレードのみを表示します。これをどのように分解または分割しますか? したがって、この列の各番号にはグレード名が表示されます。列「faoLocation」についても同じことを行う必要がありますが、一度に 1 つの問題に取り組んでいます。

4

1 に答える 1

0

これらのテーブルは正規化する必要がありますが、既にあるものを使用して、次のようなことができます。

SELECT UPLOAD.id as uploadID,
UPLOAD.title,
UPLOAD.faoLocation,
UPLOAD.date,
UPLOAD.expiry,
GRADE.ID as gradeID1,
GRADE.GRADE as GR,
GRADE.id as gradeID2 FROM UPLOAD, GRADE
WHERE 
FIND_IN_SET(gradeID2,UPLOAD.faoGrade)
and UPLOAD.owner=$user;

更新 ここにSQL Fiddleがあります。

id&という列が複数あるのは少し紛らわしいですIDgrade_IDまたはのような直感的な名前を付けるのが最善user_IDです。正規化の観点からは、コンマ区切り列の代わりにリレーショナル テーブルを使用できます (このデータがデータベースに入力される方法によって異なります)。正規化に関するビデオはこちらです。

于 2013-05-04T09:17:16.223 に答える