Все ленты — последние статьи

Как сделать, чтобы записи в таблице нумеровались “без пробоев”?

Как сделать, чтобы записи в таблице нумеровались “без пробоев”?

Несколько раз слышал на форумах такой вопрос:

Как сделать, чтобы записи в таблице нумеровались «без пробоев», т.е. первичные ключи шли по порядку 1,2,3,4,5? Ведь когда я удаляю одну из записей, то получается что-то типа 1,2,4,5, а 3-го нет.

Первичный ключ нужен не для того, что бы по нему можно было строить красивые HTML-таблички c нумерацией и не для сортировки. Он нужен для идентификации записей, чтобы по его значению можно было найти единственную запись. Он нужен для того, чтобы одна таблица могла ссылаться на другую, но не для нумерации. Забудьте, что это число, это просто уникальное значение (кстати, в большинстве других современных баз данных так и есть).

 

Допустим, у нас на сайте есть каталог продукции. Таблица categories (группы товаров):
+-------------------------------+---------------------+
category_id INT [PRIMARY KEY] name VARCHAR(255)
+-------------------------------+---------------------+
............................. ...................
+-------------------------------+---------------------+

и таблица products (товары):
+------------------------------+-----------------+---------------------+
product_id INT [PRIMARY KEY] category_id INT name VARCHAR(255)
+------------------------------+-----------------+---------------------+
............................. ................ ...................
+------------------------------+-----------------+---------------------+

Мы завели товары, группы товаров, все связали между собой с помощью поля category_id в таблице products. Спустя какое-то время шеф решил убрать какую-то группу товаров. Вы её убираете, заполняете «дыры» в нумерации таблицы categories, а про то, что надо изменить все соответствующие записи в products случайно забыли.

И начинается самое интересное — часть товаров куда-то пропадает, часть волшебным образом «переносится» в другие группы. Мониторы продаются в книжном отделе, пиво в компьютерах и так далее. Да, конечно, вы все предусмотрите и ничего не забудете. Но зачем? Для того, чтобы иметь напротив каждой строки порядковый номер? Но нумеровать строки можно и нужно в скриптах. Вот простейший пример:
<?php
$i = 1;
$res = mysql_query('SELECT * FROM products');
echo '<table>';
while( $row = mysql_fetch_array($res) )
{
echo '<tr><td>'.$i.'</td><td>'.$row['name'].'</td></tr>';
$i = $i + 1;
}
echo '</table>';
?>

Источник: http://phpfaq.ru