Como puedo evitar registros duplicados en mysql help

Como puedo evitar registros duplicados en mysql help

Postby AIDA » Thu Aug 28, 2014 4:04 am

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
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

Re: Como puedo evitar registros duplicados en mysql help

Postby goosfancito » Thu Aug 28, 2014 12:33 pm

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Como puedo evitar registros duplicados en mysql help

Postby nnicanor » Thu Aug 28, 2014 3:00 pm

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
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Como puedo evitar registros duplicados en mysql help

Postby Willi Quintana » Thu Aug 28, 2014 3:33 pm

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  Expand view

       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
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Como puedo evitar registros duplicados en mysql help

Postby sysctrl2 » Thu Aug 28, 2014 5:06 pm

Yo lo hago asi:

Code: Select all  Expand view
#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
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Como puedo evitar registros duplicados en mysql help

Postby goosfancito » Thu Aug 28, 2014 9:45 pm

me da algo vuelta en la cabeza...

porque se te repiten registros?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Como puedo evitar registros duplicados en mysql help

Postby joseluisysturiz » Fri Aug 29, 2014 3:30 am

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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Como puedo evitar registros duplicados en mysql help

Postby xmanuel » Fri Aug 29, 2014 12:43 pm

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
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Como puedo evitar registros duplicados en mysql help

Postby AIDA » Wed Sep 03, 2014 3:58 am

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ǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 78 guests