2015-09-24 4 views
0

У меня есть таблица, которая содержитКак найти/вставить данные в отсутствующую последовательность (автоинкремент) ID?

ID(P)(auto) NAME 
----------------------- 
1   Art 
4   Bankie 
6   Cara 

Последовательность данных 3 пропущенные значения ID: 2, 3 и 5.

Это мой запрос:

$fname = $_POST['fname']; 
mysql_query("INSERT INTO applicants ($fname) VALUES ('$fname')"); 

Как может быть данные ВСТАВЛЕНО вместо отсутствующего значения идентификатора, чтобы использовать все идентификаторы.

+2

С точки SQL, вам нужно сделать три вещи. Остановите AutoInc, внесите INSERT, снова включите AutoInc. Но почему вы использовали тег php? – Lucio

+0

stop autoinc - плохая идея. –

+0

Вы также можете вручную Вставить данные или даже настроить значение auto_increment. –

ответ

1

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

Я также рекомендую посмотреть следующее сообщение о защите SQL-инъекций, поскольку это необходимый шаг для обеспечения безопасного подключения к базе данных. SQL Injection Prevention

Во-вторых, не используйте функции mysql_query() php. Они устарели и были на некоторое время. Вместо этого рекомендуется использовать MySQLi или PDO.

0

Это может быть сделано с использованием переменной в sql-запросе.

Скажем $name = $_POST['fname'];

Затем вам нужно вставить запрос, как это:

insert into yourtable(id,name) 
select id-diff as new_id,'$name' from(
    select id,id - (@x := @x + 1) as diff 
    from yourtable 
    join (select @x := 0) as t1 
    order by id asc 
) as t2 
where diff <> 0 
limit 1 
Смежные вопросы