Как избежать попадания в базу дублей? Правильное решение!

vladax

Новичок
Как избежать попадания в базу дублей? Правильное решение!

Ребят, хочу найти правильное решение как избежать попадания в базу одинаковых записей.
Делать поле уникальным не покатит, т.к. полей дофигища и, если значение хотя бы одного поля записи отличается, то пишем в базу.
Неужели придётся в цикле читать каждую запись и сравнивать ещё с запостинными данными??? Как-то напрягает немного...
 

voland

Guest
То есть, если все поля кроме одного схожи писать в БД?
 

su1d

Старожил PHPClubа
а как насчёт уникального индекса по нескольким полям?
ALTER TABLE tbl ADD UNIQUE(field1, field2, field3)
 

voland

Guest
А можно поинтересоваться как могут возникнуть полностью одинаковые поля?
 

Кром

Новичок
su1d, а что это дает? При чем тут уникальный ключ и совпадающие данные?
 

vladax

Новичок
а как насчёт уникального индекса по нескольким полям?
Не знаю не знаю... я думал, что при таком раскладе получится так - если хотя бы одно поле будет совпадать, то запись не состоится? Или я заблуждаюсь?
 

vladax

Новичок
А можно поинтересоваться как могут возникнуть полностью одинаковые поля?
расстановка связей между разными уже составленными (или постоянно обновляющимися) таблицами через форму с чекбоксами.
 

vladax

Новичок
Спасиба, всё о'кай...
Теперь как сделать наименьшими потерями чтоб выводилось сообщение об ошибке если такая запись уже есть?
 

Demiurg

Guest
проверять, что возвращает функция делающая запрос.
 

Demiurg

Guest
if(mysql_query('insert ....'))
{
// вставили
}
else
{
// не вставили
}
 

vladax

Новичок
странно но что-то ошибка не подавляется
Duplicate entry '79-1' for key 1 выдаёт хоть убей
 

su1d

Старожил PHPClubа
более верный ответ: [m]mysql_affected_rows[/m]()
если такая запись уже есть в БД, то ф-ция вернёт 0, иначе 1
 

vladax

Новичок
Ща объясню... значится так...

1-ый файл - это просто форма с чекбоксами, которая выводит некие записи, в чекбокс пишем ID записи, чтоб потом их по этому ID и вытаскивать.

2-й файл - это собственно обработчик

...

function link_make($razdel, $id){
$query="INSERT INTO links(razdel, id) VALUES('$razdel', '$id')";
mysql_query($query) or die (mysql_error());
}

sql_connect(); //соединяемся

// в массиве $v скоплены ID записей, которые функция...
$k=@array_keys($v);
for ($i=0, $y=count($k); $i<$y; $i++) {

// ... link_make() связывает с нужным разделом, т.е. делает в таб. линкс соответствующую запись
$id = $v[$k[$i]];
link_make($razdel, $id);

}

sql_close(); //отсоединяемся

exit(header("Location: file.php?$razdel"));

...

Возможно ли на странице file.php?$razdel вывести список ID, которые были внесены, а которые нет, т.е. уже ранее были внесены?
 
Сверху