在我的index.php页面上,我有一个HTML表格,它显示来自两个不同数据库表(作者和书籍)的数据(作者及其书籍)。 HTML表格中的第一列是Book表格中的ID。
问题是,当我从index.php页面删除一本书时(使用HTML表格中的删除按钮),ID列不会“填补”删除记录后显示的间隙。
例如,如果我在HTML表格中有5行,ID为1,2,3,4,5,并且如果我删除第三行,则ID列将显示为1,2,4,5;所以,我希望专栏能够“适应”新情况,然后进入1,2,3,4(因为表中不再有五本书)。
任何想法怎么做?
以下是代码:
// Loading all authors
$Authors = array();
$result = mysqli_query ($db, "select * from Author");
if (!$result)
die (mysqli_error ($db));
while ($Author = mysqli_fetch_object ($result))
$Authors[$Author->ID] = $Author;
// Loading all books
$result = mysqli_query ($db, "select * from Book");
if (!$result)
die (mysqli_error ($db));
// Listing all the data
while ($Book = mysqli_fetch_object ($result))
{
echo "<tr>";
echo "<td> {$Book->ID} </td>";
echo "<td> {$Authors[$Book->Author_ID]->Name} </td>";
echo "<td> {$Book->Title} </td>";
echo "<td> {$Book->Publisher} </td>";
echo "<td> {$Book->Year} </td>";
echo "</tr>";
}
我使用的是MySQL服务器5.5.34(MySQL社区服务器GPL)
一位作者可能已经写了一本以上的书
Author_ID是Book表中的外键
答案 0 :(得分:0)
这只是一个建议。我不是说这是最好的解决方案。请考虑一下。
您执行删除查询。
DELETE FROM table_name WHERE ID = 3;
删除后,使用PHP进行选择查询请求,并将数据集设置为数组。
SELECT id, Name from table_name ORDER BY ID ASC;
然后使用循环执行UPDATE。
$id = 1;
foreach($dataset as $item)
{
// Your update query
$sql = "UPDATE table_name SET ID=$id where Name='" . $item['Name'] . "'";
$id++;
}
在插入下一个查询之前,您必须获取id的最大值并将+1值设置为插入查询的ID。这只是一个想法。不是完整的代码。
答案 1 :(得分:0)
不发布ID。而是使用一个变量来计算要显示的列,然后使用for循环来打印变量。
答案 2 :(得分:0)
您根本不应显示ID。数据库ID并不意味着被篡改。
您可以使用CSS来完全不必费心。看看这个:
table {
counter-reset: rowNumber;
}
table tr {
counter-increment: rowNumber;
}
table tr td:first-child::before {
content: counter(rowNumber);
min-width: 1em;
margin-right: 0.5em;
}