2012-06-09 2 views
1

Допустим, что у меня есть таблица связана с базой данных, как это: http://www.falkencreative.com/forum/records/view.phpMySQL идентификатор нумерации в таблице

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

Например

  1. Красный
  2. Синий
  3. Зеленый

кнопку нажмите, чтобы удалить зеленый.

  1. Красный
  2. Синий

кнопку нажмите, чтобы добавить новый цвет. вход оранжевый

  1. Красный
  2. Синий
  3. Оранжевый

Как можно заметить, что я работаю с в тушении: 1. Красный 2. Синий 4. Оранжевый (Что должно установить это на 3?)

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

+0

Я только что понял, что y ou разделяют удаление и вставку на два отдельных действия. Почему вы хотите повторно использовать идентификаторы? – Brian

+0

Hi Brian, У меня есть HTML-страница, которая принимает входные значения и помещает их в таблицу или создает. Затем у меня есть функция редактирования и удаления по сторонам, как в ссылке. Меня попросили сделать поток базы данных в последовательном порядке. У меня нет возражений, если это не самый эффективный способ, но мне было поручено это сделать. Я думаю, это показывает аккуратность, я не уверен, я просто пытаюсь сделать то, что меня попросили. – Keith

ответ

0

Я думаю, вы хотите ОБНОВИТЬ запись, а не УДАЛИТЬ старый и ВСТАВИТЬ новый.

Edit:

Если вы хотите, чтобы вставить новую запись и присвоить ему следующий порядковый идентификатор, используйте столбец без auto_increment и сделать это при добавлении новой записи:

INSERT INTO myTable (id, ...) VALUES ((SELECT MAX(id) + 1 FROM myTable), ...) 

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

0

Нет, когда вы удаляете строку базы данных, если в столбце активна AUTO_INCREMENT, она будет принимать значение из последовательности. Если вы удалите 3, последовательность всегда начинается с 3 + 1. Вы можете увидеть \ установить значение автоинкремента, например, из php myadmin. Я не знаю, какую СУБД вы используете, но с помощью оракула вы можете манипулировать последовательностью.

Итак, у вас есть разные способы.

  1. Complicated: При вставке \ удалить обновить последовательность с триггерами
  2. Вы используете 3 coloumn: id, IdToShow, Value.

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

Надеюсь, что это поможет.

+0

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

+0

Привет, Андреа, я использую PHPmyadmin, да. Итак, вы говорите, что есть способ иметь идентификатор в базе данных, который автоматически увеличивается, но способ отразить его на странице, как если бы я хотел 1,2,3, а не 1,2,4 (хотя он появляется этот путь в базе данных?) – Keith

+0

Да, вы можете использовать разные coloumn для id и id, которые вы хотите показать, и идентификатор, который вы видите в db. Когда вы вставляете coloumn, который хотите показать (1,2,3 ecc), вы подсчитываете строки, присутствующие в таблице. –

1

Возможно, у вас есть 2 варианта. Либо обновите ту же строку, где ранее было значение «Зеленый». т.е .:

mysql_query("UPDATE table_name SET color = 'orange' WHERE ID = '3'"); 

или

mysql_query("UPDATE table_name SET color = 'orange' WHERE color = 'green'"); 

или

независимо может быть вашим спецификаторов.

Это должно быть с точки зрения MySql самым простым способом. Или вы можете удалить его, как вы изначально указаны и повторно вставить новую строку с mysql_query ("INSERT INTO .... но тогда MySql PK UID необходимо будет сбросить, а именно:

mysql_query("ALTER TABLE table_name AUTO_INCREMENT = 1"); 

который удалит ваш используются PK идентификаторы и рефераты всех строк. Или есть более легкое решение?

+0

Благодарим вас за понимание и время. Но я частично запутался с первыми двумя запросами или как их использовать, так как у меня есть несколько вещей в строке, таких как выпадающие входы и т. Д. Третий, я понимаю немного больше.Это поможет мне все в порядке? На этом этапе я хочу, чтобы вывести записи в порядок, потому что, когда я удаляю один, а затем добавляю новый, все это goobledigook, а идентификаторы - везде после этой точки редактирования/удаления. – Keith

+0

ok ... вы можете отправить мне точные заголовки столбцов таблицы, и я постараюсь сделать их более точными. – Milan

0

Ваша проблема не в идентификаторах базы данных, а в том, чтобы не понимать разницу между идентификатором и номером строки. Они не имеют ничего общего друг с другом. счетчик циклов («$ i») вместо идентификатора.

<?php 
for ($i = 1; $i <= foo(); $i++) { 
    print "<tr><td>{$i}</td><td>...</td></tr>\n"; 
} 
?> 
Смежные вопросы