2012-08-29 32 views
5

Duplicar posibles:
How to 'insert if not exists' in MySQL?insertar valores únicos de matriz PHP en la tabla de SQL

Hay tabla de SQL:

CREATE TABLE IF NOT EXISTS `MyTable` (
    `id` smallint(6) NOT NULL AUTO_INCREMENT, 
    `MyVar` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) 

y hay dos matrices de PHP arr1[]=array("abc","bcd") y arr2[]=array("abc","cde").

Digamos que he guardado arr1 [] valores en la tabla de SQL. Ahora supongamos que necesito guardar los valores arr2 [] en la misma tabla SQL. ¿Qué consulta de SQL INSERT necesito escribir para evitar duplicar el guardado de la entrada "abc"? El resultado debe ser:

MyTable: 
1 | abc 
2 | bcd 
3 | cde 

pero NO:

MyTable: 
1 | abc 
2 | bcd 
3 | abc 
4 | cde 

ACTUALIZACIÓN: Tal vez el MiTabla debe crearse/definida de tal manera que las entradas duplicadas se ignoran?

+0

Establezca una restricción única para su columna MyVar. Por lo tanto, intentar insertar un valor que ya existe no funcionará. – TRD

+0

http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – matino

+0

'INSERT IGNORE' + resto de la consulta –

Respuesta

1

Haga MyVar como UNIQUE en su tabla.

De esta manera:

CREATE TABLE IF NOT EXISTS `MyTable` (
    `id` smallint(6) NOT NULL AUTO_INCREMENT, 
    `MyVar` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE INDEX `myvaridx` (`MyVar`) 
); 

o, si no es capaz de recrear la tabla, alterarlo mediante

ALTER TABLE `request` 
ADD UNIQUE INDEX `myvaridx` (`MyVar`) 
6

Hay 3 soluciones posibles: usando INSERT IGNORE, REPLACE, o INSERT ... ON DUPLICATE KEY UPDATE. Compruebe esto article.

También puede en la memoria intersect array-s y luego insertar solo valores únicos si esa solución se ajusta para usted.

0

Uso de SQL para tal tarea sería un desperdicio.

Sugiero utilizar la función "array_merge" para combinar las matrices y luego la función "array_unique" para manejar la duplicación.

A continuación, inserte los valores únicos en la base de datos.

Cuestiones relacionadas