php - unico - validar campos repetidos javascript
La mejor manera de evitar la entrada duplicada en la base de datos mysql (4)
Desde un punto mysql puedes hacer
alter table YOURTABLE add unique index(pageId, name);
Si tu redacción es correcta y quieres hacerlo desde php puedes hacerlo
$already_done = array();
foreach ($records as $record)
{
$unique_hash = md5($record[''name''].$record[''pageId'']);
if (!in_array($unique_hash, $already_done))
{
$already_done[] = $unique_hash;
// sql insert here
}
}
De cualquier manera, esos deberían hacer bien.
Tengo una tabla con 3 columnas: id (pk), pageId (fk), nombre. Tengo un script php que vierte unos 5000 registros en la tabla, y aproximadamente la mitad son duplicados, con el mismo ID de página y nombre. La combinación de pageId y nombre debe ser única. ¿Cuál es la mejor manera de evitar que los duplicados se guarden en la tabla mientras recorro el script en php?
El primer paso sería establecer una clave única en la tabla:
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
Luego debes decidir qué quieres hacer cuando hay un duplicado. Deberías:
¿ignoralo?
INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
¿Sobrescribir el registro ingresado previamente?
INSERT INTO thetable (pageid, name, somefield) VALUES (1, "foo", "first") ON DUPLICATE KEY UPDATE (somefield = ''first'') INSERT INTO thetable (pageid, name, somefield) VALUES (1, "foo", "second") ON DUPLICATE KEY UPDATE (somefield = ''second'')
¿Actualizar algún contador?
INSERT INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo") ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
Puede configurar el PageID y el Nombre en un índice único en la base de datos MySQL. De esta forma, cuando insertas las filas, se producirá un error que PHP puede ignorar, y puedes ir a la siguiente fila.
Esto supone que está insertando filas individualmente. AKA:
foreach($large_data as $fields)
{
mysql_query("INSERT INTO TABLE (`Something`) VALUES(''".$fields[''something'']."'');
}
También puede ignorar el error con mysql: INSERT IGNORE INTO TABLE ... ignorará el error clave, omitirá ese inserto y pasará al siguiente.