Como puedo evitar registros duplicados en mysql help

Post Reply
User avatar
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Como puedo evitar registros duplicados en mysql help

Post by AIDA »

Hola


se me están duplicando algunos registros :shock:

como debo hacer para evitar se dupliquen, como se filtran borran etc. en Mysql :?:


Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: Como puedo evitar registros duplicados en mysql help

Post by goosfancito »

el "se me estan duplicando" suena a cosa de mandinga. pero bueno yo haria esto:
1) backup
2) buscar cuales son los duplicados (comparando registros)
3) una vez que tengo esos registros ver que si los borros no altere otros (por las dudas que hayan sido creado por tablas conectadas entre si)
4) asegurarse que el usuario que esta abriendo la base de datos tenga permisos para eliminar.
5) en un ARRAY pondria los ID de esos registros que quiero eliminar y luego recorro el array y voy borrando el registro.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
nnicanor
Posts: 296
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Como puedo evitar registros duplicados en mysql help

Post by nnicanor »

Aida,

Para evitar la duplicacion de registros debes simular el bloqueo, esto porque MYSQL no tiene bloqueo a nivel de registro, confirmame que usas para acceder a mysql si es dolphin te puedo enviar un ejemplo de como hacerlo.

Slds
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Como puedo evitar registros duplicados en mysql help

Post by Willi Quintana »

Holas,,, Para evitar que se dupliquen registros,,, mucho tiene que ver el diseño de la tabla, como crear llaves únicas, primarias etc,,, asi el mismo MySQL se encarga de controlar el tema...
Para eliminar registros duplicados de la tabla clientes en cuyo campo ruc_dni están los registros duplicados
1ro. creamos una tabla temporal (clientmp) con la misma estructura y datos de la tabla de clientes pero agrupado por el campo ruc_dni
2do. eliminamos la tabla clientes
3ro. insertamos los registros e la tabla clientmp a la tabla clientes ( ya vienen sin duplicados)
4to. eliminamos la tabla clientmp
5to.optimizamos la tabla clientes

y listo......

Code: Select all

       cRegis := "CREATE TABLE clientmp AS SELECT * FROM clientes GROUP BY (clientes.ruc_dni)"    // 1ro
       SQLExec(oMySQL, cRegis)

       cRegis := "DELETE FROM clientes"                                                  // 2do
       SQLExec(oMySQL, cRegis)

       cRegis := "INSERT INTO clientes (SELECT * FROM clientmp)"                         // 3ro
       SQLExec(oMySQL, cRegis)

       cRegis := "DROP TABLE clientmp"                                                               // 4to
       SQLExec(oMySQL, cRegis)

       cRegis := "OPTIMIZE TABLE clientes"                                                        // 5to
       oObj := SQLQry(oMySQL, oObj, cRegis)

 
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Como puedo evitar registros duplicados en mysql help

Post by sysctrl2 »

Yo lo hago asi:

Code: Select all

#include "fivewin.ch"
#include <tdolphin.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )

Function Test()
    local cClave := "0001"
    local cNombre := "CESAR CORTES CRUZ"
    local cDir    := "CANELO 97"
    local cQry := ""
    local oQry
   local nSeek

    * verificamos si el registro existe

    cQry := "SELECT clave,nombre"
    cQry += " FROM clientes"
    cQry += " WHERE clave=" + C_SIMPLE + cstr2( cClave ) + C_SIMPLE
    cQry += " ORDER BY clave LIMIT 1"
    oQry := oCon:Query( cQry )
    nSeek := oQry:nRecCount
    oQry:End()

    if nSeek = 0
        cQry := "INSERT INTO clientes SET "
        cQry += "clave=" + ClipValue2SQL( cClave )  + ","
    else
        cQry := "UPDATE clientes SET "
    endif
    cQry += "nombre=" + ClipValue2SQL( cNombre ) + ","
    cQry += "direccion=" + ClipValue2SQL( cDir )

    if nSeek > 0
        cQry += " WHERE clave=" + C_SIMPLE + cstr2( cClave ) + C_SIMPLE
    ENDIF

    //guardamos la informacion
    oCon:BeginTransaction()
    oCon:Execute( cQry )
    oCon:CommitTransaction()

Return nil

FUNCTION cStr2( nNum )
RETURN AllTrim( CStr( nNum ) )
SALUDOS.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: Como puedo evitar registros duplicados en mysql help

Post by goosfancito »

me da algo vuelta en la cabeza...

porque se te repiten registros?
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Como puedo evitar registros duplicados en mysql help

Post by joseluisysturiz »

Saludos, llegue tarde a la clase, creo ya todo lo han dicho, el mejor control para evitar duplicidad de registro es el campo Key, con eso no hay pele, por que hasta haciendolo directamente sobre la tabla con algun administrador de database, te avisara que el campo que estas tratando de entrar existe. Tambien podiras crear una rutina ordenando los registros por el camopo dupliacado, haces un gotop a la tabla, usas un do while !eof() y comparas con una var el valor duplicado, si es igual a la var lo borras, menos la primera vez para que quede uno, luego cuando encuentro uno que no sea, le pasa ese valor a la VAR, saltas un registro y sigue la rutina de preguntar si esta duplicado y borrarlo, a lo mejor parace algo ambiguo y trabajoso, pero si no tiene buen control sobre MySql, esto sera mejor, ya que un pele en Mysql y seguro limpias toda la tabla. Obviamente antes de hacer todo esto, la recomendacion es tener un respaldo preventivo de las tablas, por si acaso, espero haber ayudado en vez de enrredar m as, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Como puedo evitar registros duplicados en mysql help

Post by xmanuel »

Lo mejor es lo que dice Willi.

Si tienes acceso al servidor mediante frontend como HeidiSQL o algún otro mejor, así te evitaras hacer programas.

CREATE TABLE nuevaTabla SELECT DISTINCT * FROM viejaTabla;

Prueba eso Aida.

Fijate en el DISTINCT .

Luego:
1) comprueba la nuevaTabla que tiene lo que tu quieres -> SELECT * FROM nuevaTabla ORDER BY campo
2) Borras la tabla vieja -> DROP TABLE tablaVieja
3) Renombras la nueva al viejo nombre -> RENAME TABLE nuevaTabla TO tablaVieja
4) Crea en la tabla una clave primaria -> ALTER TABLE tablaVieja ADD PRIMARY KEY ( campo,...)

Las sentencias las he hecho sin probar pero son esas :oops:

Salu2 :D
______________________________________________________________________________
Sevilla - Andalucía
User avatar
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Re: Como puedo evitar registros duplicados en mysql help

Post by AIDA »

Muchas gracias tomare nota :mrgreen:




Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Post Reply