2012-04-25 3 views
1

База данных:Обновление ID в базе данных

Таблица: новости

с колоннами: Уникальный и первичный ключ, который приросты авто под названием ID, содержание и название


Код:

-> Создание формы с текстовым полем, в котором пользователь может поместить его значение для ID и, таким образом, положение пункта

$form->textField("Position of the item item", "id", false, 30, false, getIfExists("id", $originalValues)); 

-> Сообщения новый ID как запрос к базе данных

$queryvalues["id"]  = $_POST[ "id" ]; 

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

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

Однако я не слишком уверен, как подойти к этому и есть ли лучший вариант/решение.

Есть ли у кого-нибудь идеи/советы/подсказки?

Я пытался использовать ON DUPLICATE KEY UPDATE, но до сих пор мне не повезло.


EDIT:

Хорошо, так что заказ теперь работает. Я создал новый столбец «Позиция» и просто использовал его для упорядочивания элементов, и он отлично работает.

Однако, если я добавлю новый элемент с тем же положением, он поместит его в другое положение. Таким образом, в основном новый «0» отображается под старым «0», при этом используется один и тот же ключ. Любые предложения по устранению этого? Я думал об увеличении старого дубликата ключа. Но понятия не имею, как это будет работать точно.

ответ

0

Я понимаю, что вы хотите использовать ID для заказа своих товаров: не делайте этого.

Вместо этого добавьте новые столбцы с именем «упорядочивание»:

  • При ВСТАВИТЬ-ки элемент, установите это значение поля к значению ID
  • Когда UPDATE инга позиции элемента, поменять положение значение между двумя элементами, которые двигаются
3

Не прикасайтесь к столбцу id, оставьте его как есть. Создайте новый столбец с именем «position» и используйте его, затем он позволит нестандартные значения.

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

+0

Однако, если бы это не уникальным, не так, что конфликт из-за позицию дублировать «позицию» –

+0

столбец идентификатора всегда должны быть уникальными. Если у вас есть дубликаты в столбце позиции, это не вызовет ошибок, оно просто поместит один над другим в зависимости от указанного порядка. – 472084

+0

А, ладно. Наверное, я просто думаю слишком сложно. Спасибо за помощь. PHP/MySQL для меня новый, так как я больше в Java/C++ и т. Д. –

1

«Первичный ключ» вынуждено быть уникальными и постоянно сохраняется. Он является идентификатором Entity и не предназначен для использования в качестве сортировки/упорядочения.

удовлетворял ваши требования, просто добавьте Int или DATETIME поле/метку времени, то SELECT * FROM yoour_table ORDER BY field_name

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