Проблема при удалении строки из таблицы
А проблема такая.
На mysql реализована корзина покупателя.
На страницу basket передаю add товара через Get в url.
на странице basket этот add проверяю на наличие в базе.
Одна из проверок заключается в следующем:
делаю запрос к таблице с товаром (tovar)
$result = mysql_query ( "SELECT `id` FROM `tovar`");
дальше получаю кол-во строк из этой таблицы
$num_rows = mysql_num_rows($result);
и затем если
if ($add <= $num_rows)
провожу добавление в таблицу ,которая является "корзиной" этот товар и сессию.
Так вот, проблема такова.
Допустим у меня в таблице tovar 100 строк и id идут по порядку. Если я удалю из таблицы 10 строк, а потом добавлю ещё 10 строк, то id товара уже запишутся от 100 т.е будет 101,102,103.........110, хотя строк будет также 100.
И проверка уже не пройдёт (((, товар с id 102 уже не добавится.
Возможно сделать так, что бы после удаления строк, id продолжали вставляться по порядку. Т.е если было 100 строк, удалил 10, то при добавлении новых строк, id начинался бы с 91 а не с 101???
SELECT `id` FROM `tovar` WHERE `id` = $add
Далее уже проверяете, есть ли наличие записи или нет. Если id нет, то и кол-во выбранных записей равно нулю.
$result = mysql_query ( "SELECT `id` FROM `tovar`"); - данной командой вы вообще дико нагружаете СУБД + канал передачи данных от субд до скрипта + выделяете слишком много лишней памяти. Уж хотя бы COUNT(`id`) был бы и то разумнее на порядки.
Но мне больше интересен такой момент:
( с муслулом работаю через phpmyadmin ), есть таблица с товаром (tovar),
пример таблицы:
поля: id, goods, у поля id стоит AUTO_INCREMENT,
вопрос: возможно ли сделать так что: после удалении 10 строк (при условии сто в таблице их 100, и последний id == 100), значение id записывалось бы 91, а не 101???
поля: id, goods, у поля id стоит AUTO_INCREMENT,
вопрос: возможно ли сделать так что: после удалении 10 строк (при условии сто в таблице их 100, и последний id == 100), значение id записывалось бы 91, а не 101???
Сделать то можно, для этого надо написать свой триггер на вставку и генератор чисел. Но это опять индусизм. Какова его цель?
Может случится ситуация: был товар к примеру "Гандоны" с id = 88 его удалили, и ввели "Пластырь" (с тем же id) а где то забыли в связанных таблицах удалить, в результате вся структура полетит к черту, покупатель заказавший в свое время гандоны получит по почте пластырь, и будет долго думать чего ему заматывать.
Кстати спасибо COUNT, в мане по этому поводу написано??, не видел
P.S. почитаю повнимательнее.
Где узнать какую функцию использовать лучше??
Да ладно, у нас все сообразительные )))
Спасибо за ответ, я понял
Это опыт показывает и степень разумности мозга.
Не делайте бред, который описали выше. Я вам дам вполне адекватный совет, как правильно делать. Иначе по вашему реализуете щас триггеры, хранимые процедуры и прочее, в итоге получится вообще УГ.
UPD: вот представляю ситуацию: удалил я допустим страну с oid=90 и title=Sweden. И зае…ил с тем же oid страну Буркина-Фасо. А в поисковиках уже на Sweden индексировался какой-нибудь country90.htm. Прёт человек по этому адресу, и мало того что не попадает на Sweden или хотя бы на warning "Pardon. Etogo porcha tut boshe nemae", а попадает тупо на Буркина-Фасо. Неприятность, однако…