我有两个数据库。第一个包含上传凭据列表以及上传时间和到期日期的用户名单。这被存储为代表使用内爆的每个等级的人的数字。所以列名'foagrade'在第一行中有10,11,12。第二个数据库是一个等级列表,有ID,例如10 =经理,11 = HR等。我使用左连接和基本的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>";
查询显示所有详细信息,但仅显示存储在列faograde(MANAGER)中的第一个等级而不是11或12。 我怎么会爆炸或分裂这个?因此,对于此列中的每个数字,都会显示成绩名称。我也必须对列'faoLocation'做同样的事情,但是一次处理一个问题。
答案 0 :(得分:0)
这些表格应该是normalized,但是你已经拥有了这样的表格,你可以这样做:
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
&amp;列的列有点令人困惑。 ID
。最好给他们直观的名字,如grade_ID
或user_ID
。从标准化的角度来看,您可以使用关系表而不是逗号分隔列(取决于此数据如何进入数据库)。这是一个video about normalization。