Перейти к содержанию
wowez

Последний product_id сброс

Рекомендуемые сообщения

Здравствуйте вопрос в том, что у меня последний id реального продукта 698, - далее я добавлял товары с админки штук 10-15, и вот в итоге последний id стал 718, - далее я удалил эти 10-15 товаров, но id далее так же и добавляется 719, 720, 721 и т.д. как сбросить что бы товары так и добавлялись с реального id.

 

Простите конечно но даже не пойму как искать  и "сброс product_id" u reset product_id не дает корректной информации

 

Помогите пожалуйста, добрый человек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с чем именно связано неудобство использования? Если вам при этом не удобно, значит вы что-то делаете не так, потому что все правильно и работает как надо. Напишите в чем именно заключается задача, может поможем советом.

 

А вообще ваша проблема связана с использованием атрибута auto_increment. Для его сброса нужно выполнить запрос:

ALTER TABLE <имя таблицы> AUTO_INCREMENT = 718
Изменено пользователем halfhope

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ALTER TABLE <имя таблицы> AUTO_INCREMENT = 718

 

Простите но какой таблицы ? это те или какая из них?

 

oc_product_attribute

oc_product_description

oc_product_discount

oc_product_filter

oc_product_image

oc_product_option

oc_product_option_value

oc_product_recurring

oc_product_related

oc_product_reward

oc_product_special

oc_product_to_category

oc_product_to_download

oc_product_to_layout

oc_product_to_store

 

 

А так необходимо что бы когда удалил допустим 43 товара на разных позициях, и причем с админки (это для заказчика), а у последнего товара по id, самый большой какой уже есть номер, и когда снова добавляешь товар отсчет шел с последнего существующего id а не со значения AUTO_INCREMENT.

 

И маленько поясню задачу (пожелания заказчика) и ох как и задам вопросик?

в прилагаемой картинке вот так сделано мною - всё работает.

adm.png

 

в списке продуктов менеджер и хозяин 2-х небольших магазинов что бы могли ориентироваться легкопри добавлении изменениии и удалениии товаров.

Задача такая что бы добавлялся товар заполнением только наименованием товара (бывает так надо), и товар выводится на сайт под номером котрый совпадает с product_id - ну он и есть.

Я вставил $product_id в вывод $text_model  на сайте в карточке товара, все выводится - работает

 

site.png

 

но вот незадача теперь по коду товара на сайте не находим ничего

 

 search.png

 

А надо. Вотэто вопрос уже другой, а пока остается тот же, 

как сделать, что бы отсчет шел с последнего существующего id а не со значения AUTO_INCREMENT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас неправильный подход к решению первой проблемы, отсюда вытекает вторая проблема с автоинкркментируемым полем. Решите первую правильно и не нужно будет с инкрементируемым полем бороться, с ним все четко, работает как надо. Это мое мнение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

product_id - по своей сути нарастающий счетчик товара, с уникальными значениями

он используется для идентификации, этакий своеобразный паспорт

 

играться с ним не нужно, это приведет к проблемам с данными в базе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё раз, суть такова (пожелания заказчика), вот есть 685 товаров и последний id - 685, я удаляю с конца 35 товаров и последний товар теперь имеет id-650, теперь добавляю товар и он получает id-686, а надо что бы получил id-651.

Так хочет заказчик ибо сам будет добавлять и удалять товары из админки, и хочет получать корректную нумерацию товаров отсчитывая от последнего существующего максимального id (так им проще так хотят и что бы вручную типо не проставлять), а получает сейчас значение из  инкрементируемого поля  для них это получается непонятный номер нового товара. Как быть.

 

как сделать, что бы отсчет шел с последнего существующего id а не со значения AUTO_INCREMENT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 

Так хочет заказчик ибо сам будет добавлять и удалять товары из админки

Странные вопросы как для исполнителя 

 

 

 

как сделать, что бы отсчет шел с последнего существующего id а не со значения AUTO_INCREMENT

Красиво, производительно и правильно - никак 

 

Для это используйте дополнительные поля в которые можно вводить id товара и не придумывайте велосипед 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а в середине ваш заказчик товар удалит, например с id-600 - что тогда?

id во всех товарах переименовывать?

 

счетчик потому и сделан нарастающим, чтобы не было путаницы в БД

 

заказчику сказать что это изюм и он не продается что это приведет к сбою данных в БД и так делать нельзя

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а в середине ваш заказчик товар удалит, например с id-600 - что тогда?

id во всех товарах переименовывать?

 

счетчик потому и сделан нарастающим, чтобы не было путаницы в БД

 

заказчику сказать что это изюм и он не продается что это приведет к сбою данных в БД и так делать нельзя

 

 

да вот же я и говорил о том, что в середине не важно, важно что бы id присваивался от последнего максимального значения id продукта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

бред конечно
 
SELECT MAX(product_id) as max FROM oc_product
ALTER TABLE oc_product AUTO_INCREMENT = :max;

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скорей всего max+1

Смотреть не буду

Изменено пользователем chukcha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нумерация и так корректная.

заказчик хочет унитаз прибитый к потолку.

если он продолжает настаивать на своем бреде - шли его в лес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам уже 2 раза сказали, что Вы не правильно начали решать задачу. К Id продукта подвязываются еще кучка таблиц в БД. Удалив продукт, вы не удалите скидки, картинки, сео-урл, фильтра, акции и т.д. А добавив новый товар, получите набор атрибутов и всего остального к старому. К чему это приведет? - К путанице в последствии. Поэтому не заморачивайте себе голову, а делайте, как подсказано - новую колонку в таблице продуктов, которую и инкрементируйте сами, ловя из БД ее максимальное значение, а потом уже используйте там, где удобно. А к стандартам лезть не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..Удалив продукт, вы не удалите скидки, картинки, сео-урл, фильтра, акции и т.д. А добавив новый товар, получите набор атрибутов и всего остального к старому. К чему это приведет? - К путанице в последствии.

если таблицы стандартные - все эти связи удаляются вместе с удалением самого товара (см. deleteProduct() в admin\model\catalog\product.php

 

а вот всякое-нестандартное в этой ситуации под вопросом, все будет зависеть от грамотности разработчиков различных модулей

если толковые - учтут удаление связей при удалении товара

 

а если нет - как раз и будут проблемы

хочет ТС получить возможные проблемы в будущем - пусть делает как chukcha выше написал, решение вполне подходящее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

OC не умеет каскадно удалять данные  нет у него FOREIGN KEY Constraint

 

потому, если удаление товара не происходит через метод удаления, то возможны дальнейшие проблемы, особенно при добавлении нового.

Так же проблемы могут возникнуть и при неудачном удалении (например, отвалилось, что-то). Т.е. товар удалился, а связи - нет.

 

Поэтому притча

 

Родился мальчик, а у него вместо пупка гайка.

Приходит он к бабке поветухе и говорит: Слышь бабуль вот все дети как дети, а у меня гайка вместо пупка. Что делать?
- Это длинная история. Пойдешь за тридевять земель в тридевятое царство, будешь идти тридцать три года три дня и три месяца. Сносишь трое железных сопогов, сломаешь трое железных посохов. Придешь туда, увидишь дуб на дубе будет ларец, в ларце будет заяц в зайце будет утка в утке будет яйцо и в яйце найдешь то, что тебе надо.

 

Ну и пошел мальчик за тридевять земель в тридевятое царство, шел тридцать три года три дня и три месяца. Сносил трое железных сапогов, сломал трое железных посохов. Пришел туда, дуб завалил, ларец сломал зайца убил, утку убил яйцо ломает а там гаечный ключ внутри.

 

Он гайку на пупке откручивает, у него жопа отваливается.
Мораль: Не ищи на жопу приключений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС'у все и так говорят - не трогай

 

если при удалении товара (при стандартном инкременте) где-то останутся связи/данные о этом товаре - это полбеды

но вот когда инкремент гуляет туда-сюда - ни к чему хорошему такие "хвосты" не приведут при совпадении id

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От halfhope
      Не знаю как узнать id категории на странице товара стандартными средствами OpenCart. Причем, я так понял, что товар может быть в разных категориях. Можно ли узнать это стандартными средствами?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.