2014-01-03 2 views
0

На моей странице index.php У меня есть таблица HTML, которая показывает данные (авторы и их книги) из двух разных таблиц базы данных (автор и книга). Первый столбец в таблице HTML - это идентификатор из таблицы Book.Как отрегулировать столбец идентификатора после удаления записей из таблицы HTML?

Проблема заключается в том, что когда я удаляю книгу с страницы index.php (используя кнопку удаления внутри таблицы HTML), столбец идентификатора не заполняет пробел, который появляется после удаления записи.

Например, если у меня есть 5 строк в таблице HTML с идентификаторами 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 является иностранным ключом в таблице заказов

+0

сообщение, что код, который вы до сих пор. Также укажите свою систему баз данных sql, которую вы используете (это может иметь значение). –

ответ

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++; 
} 

Перед тем, как вставить следующий запрос, который вы должны получить максимальное значение идентификатора и установить +1 значение в качестве идентификатора запроса вставки. Это всего лишь идея. Не полный код.

0

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

0

Вы не должны отображать идентификаторы вообще. Идентификаторы базы данных не предназначены для подделки.

Вы можете использовать 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; 
} 

http://jsfiddle.net/davidThomas/7RyGX/

+0

Приятный мистер Дэвид Томас предоставил JS-решение. CSS намного шире, но вот он: http://jsfiddle.net/davidThomas/7RyGX/1/ – Omphaloskopie

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