Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Eliminar registros duplicados con id alto

Estas en el tema de Eliminar registros duplicados con id alto en el foro de Bases de Datos General en Foros del Web. Hola, mi problema es que quiero eliminar regitros duplicados en la tabla nuke_users de mi portal php-nuke. Pero no es cualquiera sino el que tenga ...

  #1 (permalink)  
Antiguo 21/02/2005, 13:16
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Eliminar registros duplicados con id alto

Hola, mi problema es que quiero eliminar regitros duplicados en la tabla nuke_users de mi portal php-nuke.
Pero no es cualquiera sino el que tenga el ID mas alto.
Los campos son ID y username

Busque informacion antes de preguntar y me encontre con esto:
Código PHP:
SELECT DISTINCT usernameuser_id FROM nuke_users ORDER BY user_id DESC
Al parecer eso me deja todo como quiero pero no se como hago para exportar esos datos con todos los campos que le faltan a una nueva tabla que luego pueda renombrar para poder usarla.

Ayudenme porfavor, hace dias que deje el mismo mensaje y nadie me responde.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #2 (permalink)  
Antiguo 21/02/2005, 13:34
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Si te entendi bien quieres borrar al usuario que tenga id repetido y el que se va a borrar es el Id mas alto?
  #3 (permalink)  
Antiguo 22/02/2005, 07:08
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Quiero borrar el username con el user_id mas alto. Con ese codigo que puse me deja la todos los registros sin sus copias pero no me da todos los campos y quisiera guardarla con otro nombre o exportarla para poder usarla.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #4 (permalink)  
Antiguo 22/02/2005, 08:29
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Lo que hace el DISTINC es que si tienes varios campos repedidos los omite y por asi decirlo los agrupa en uno, mas no los borra solo agrupa tu select omitiendo los que se repiten.
  #5 (permalink)  
Antiguo 22/02/2005, 09:25
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
si quieres eliminar el usuario con el id más alto la consulta sería algo así

Código:
DELETE FROM nuke_users 
where user_id=(
SELECT max(user_id) FROM nuke_users)
con esto se eliminaría de la tabla nuke_users el usuario que tuviera el id más alto de la misma

espero que te sirva
  #6 (permalink)  
Antiguo 25/02/2005, 07:56
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Parece que hay un error, me dice:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT max(user_id) FROM nuke_users)' at line 1
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #7 (permalink)  
Antiguo 25/02/2005, 12:49
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 9 meses
Puntos: 0
Fijate que subconsultas solo aceptan las BD mysql desde la version 4 .
Pero con esa consulta estarías borrando el registro con id mas alto. Yo entiendo que vos queres borrar de los registr duplicados el que tenga el ID mas alto.

ID - USUARIO y quede así: ID - USUARIO
------------ -------------
15 - javier 15 - javier
16 - javier 17 - pepe
17 - pepe 18 - juan
18 - juan
19 - juan

Es eso lo que querés?????
  #8 (permalink)  
Antiguo 25/02/2005, 13:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 9 meses
Puntos: 0
Con esto te va a borrar de todos los username repetidos (o sea cuando hay mas de un username), pero solo los de id mas alto de los repetidos
En fin la tabla queda como te dije antes.
Esto te borra los registros repetidos
La tabla quedaría así:

Tu tabla es:
ID - USUARIO
------------
15 - javier
16 - javier
17 - pepe
18 - juan
19 - juan

y quedarías así:
Tu tabla es:
ID - USERNAME
------------
15 - javier
17 - pepe
18 - juan


DELETE FROM nuke_users
WHERE user_id = (
SELECT max(user_id)
FROM nuke_users
GROUP BY username
HAVING COUNT(*) > 1
);
  #9 (permalink)  
Antiguo 25/02/2005, 16:39
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Si eso mismo. :)
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #10 (permalink)  
Antiguo 25/02/2005, 16:51
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Eso es lo que quiero, pero al hacerlo me aparece un error:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT max(user_id)
FROM nuke_users
GROUP BY usernam
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #11 (permalink)  
Antiguo 25/02/2005, 17:10
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 9 meses
Puntos: 0
Es que casi seguro que tenés una version que no soporta subconsultas. Instala la version 4.10 de mysql, fijate que hay una que la bajas, y la descomprimis y la copias en la carpeta donde tenes instalado ahora MySQL y listo.....A lo sumo reinicias y chau. Antes de hacer eso acordate de hacer un backup de las bases de datos que tengas........Eso es lo primero que tenes que hacer... La consulta esta bien estoy seguro.
  #12 (permalink)  
Antiguo 25/02/2005, 23:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 9 meses
Puntos: 0
Te repito que la consulta esa te borra el registro con id mas alto con username repetido, o sea solo el que tiene id mas alto, pero si tenes supongamos 4 registros con el mismo username te va a dejar el mas chico, y los dos que le siguen, porque solo te va a borrar el mas alto. Si lo que queres es borrar todos los repetidos, pero dejando el que tiene id mas bajo tenes que hacer esto. En este caso no importa cuantos repetidos haya, porque te va a dejar uno solo, el que tiene id mas bajo

DELETE FROM nuke_users
WHERE user_id NOT IN (
SELECT MIN(user_id)
FROM nuke_users
GROUP BY username
);

  #13 (permalink)  
Antiguo 25/02/2005, 23:45
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años, 6 meses
Puntos: 7
por cierto, que version de MySQL es?
  #14 (permalink)  
Antiguo 28/02/2005, 10:51
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Lo probe de forma local para tener todo actualizado pero ahora se me presenta un error diferente.

You can't specify target table 'nuke_users' for update in FROM clause
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #15 (permalink)  
Antiguo 28/02/2005, 10:59
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Hay un tema general en todos los gestores y es que no se puede usar en una subselect de una sentencia update/delete, la misma tabla sobre la que se ejecuta la acción.
Si el gestor que usas te admite subselects:
Código:
create temporary table quedan_users (usuario char(15), user_id integer);

insert into quedan users (usuario, user_id) 
select usuario, min (user_id) userid 
from nuke_users group by 1 into temp quedan_users;

delete from nuke_users 
where not user_id in (select userid from quedan_users);
Si usas una versión de mysql que no admite subselects, pues se complica el asunto y sólo lo puedes hacer por medio de un programa.
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 28/02/2005 a las 11:19
  #16 (permalink)  
Antiguo 28/02/2005, 11:05
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 11 meses
Puntos: 11
verifica primero la lista de Usuarios que tienes duplicados

SELECT campo,Count(campo) FROM tabla GROUP BY campo HAVING Count(campo) > 1

luego con dicha lista ya solo esta de hacer un query para determinar el Id mas alto y poder eliminarlo


PD: Lean las FAQ de BBDD
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #17 (permalink)  
Antiguo 28/02/2005, 21:14
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
No me recomendarian algun programa?, no logro hacerlo con toda la ayuda que me han dado.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #18 (permalink)  
Antiguo 01/03/2005, 03:18
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
no hay un programa que te pueda ayudar, simplemente es SQL, prueba lo que te dijo Vice que te tiene que funcionar, ejecuta las sentencias una por una y no tendrías que tener ningún problema
  #19 (permalink)  
Antiguo 03/03/2005, 16:57
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Pago a quien me haga esto...

Hola, como lo dice en todo este tema necesito lo siguiente.

Un php que:

- Entre en una base de datos
- Luego una tabla
- Busque en el campo username los registros duplicados
- Que seleccione de esos repetidos el user_id mas bajo.
- Elimine el resto de los repetidos de manera tal que solo queden los que tienen el id mas bajo sin mas repetidos.

El pago es por Paypal, $20.

En este mismo tema se facilitan muchas cosas, solo faltaria un php que lo haga.

Aqui les dejo la tabla para practicar que funcione correctamente:

Código:
CREATE TABLE `nuke_users` (
 
`user_id` int(11) NOT NULL auto_increment,
 
`name` varchar(60) NOT NULL default '',
 
`username` varchar(25) NOT NULL default '',
 
`user_email` varchar(255) NOT NULL default '',
 
`femail` varchar(255) NOT NULL default '',
 
`user_website` varchar(255) NOT NULL default '',
 
`user_avatar` varchar(255) NOT NULL default '',
 
`user_regdate` int(50) NOT NULL default '0',
 
`user_icq` varchar(15) default NULL,
 
`user_occ` varchar(100) default NULL,
 
`user_from` varchar(100) default NULL,
 
`user_interests` varchar(150) NOT NULL default '',
 
`user_sig` varchar(255) default NULL,
 
`user_viewemail` tinyint(2) default NULL,
 
`user_theme` int(3) default NULL,
 
`user_aim` varchar(18) default NULL,
 
`user_yim` varchar(25) default NULL,
 
`user_msnm` varchar(25) default NULL,
 
`user_password` varchar(40) NOT NULL default '',
 
`storynum` tinyint(4) NOT NULL default '10',
 
`umode` varchar(10) NOT NULL default '',
 
`uorder` tinyint(1) NOT NULL default '0',
 
`thold` tinyint(1) NOT NULL default '0',
 
`noscore` tinyint(1) NOT NULL default '0',
 
`bio` tinytext NOT NULL,
 
`ublockon` tinyint(1) NOT NULL default '0',
 
`ublock` tinytext NOT NULL,
 
`theme` varchar(255) NOT NULL default '',
 
`commentmax` int(11) NOT NULL default '4096',
 
`counter` int(11) NOT NULL default '0',
 
`newsletter` int(1) NOT NULL default '1',
 
`user_posts` int(10) NOT NULL default '0',
 
`user_attachsig` int(2) NOT NULL default '0',
 
`user_rank` int(10) NOT NULL default '0',
 
`user_level` int(10) NOT NULL default '1',
 
`broadcast` tinyint(1) NOT NULL default '1',
 
`popmeson` tinyint(1) NOT NULL default '0',
 
`user_active` tinyint(1) default '1',
 
`user_session_time` int(11) NOT NULL default '0',
 
`user_session_page` smallint(5) NOT NULL default '0',
 
`user_lastvisit` int(11) NOT NULL default '0',
 
`user_timezone` tinyint(4) NOT NULL default '10',
 
`user_style` tinyint(4) default NULL,
 
`user_lang` varchar(255) NOT NULL default 'spanish',
 
`user_dateformat` varchar(14) NOT NULL default 'D M d, Y g:i a',
 
`user_new_privmsg` smallint(5) unsigned NOT NULL default '0',
 
`user_unread_privmsg` smallint(5) unsigned NOT NULL default '0',
 
`user_last_privmsg` int(11) NOT NULL default '0',
 
`user_emailtime` int(11) default NULL,
 
`user_allowhtml` tinyint(1) default '1',
 
`user_allowbbcode` tinyint(1) default '1',
 
`user_allowsmile` tinyint(1) default '1',
 
`user_allowavatar` tinyint(1) NOT NULL default '1',
 
`user_allow_pm` tinyint(1) NOT NULL default '1',
 
`user_allow_viewonline` tinyint(1) NOT NULL default '1',
 
`user_notify` tinyint(1) NOT NULL default '0',
 
`user_notify_pm` tinyint(1) NOT NULL default '0',
 
`user_popup_pm` tinyint(1) NOT NULL default '0',
 
`user_avatar_type` tinyint(4) NOT NULL default '3',
 
`user_sig_bbcode_uid` varchar(10) default NULL,
 
`user_actkey` varchar(32) default NULL,
 
`user_newpasswd` varchar(32) default NULL,
 
`puntos` int(10) default '0',
 
`user_group_cp` int(11) NOT NULL default '2',
 
`user_group_list_cp` varchar(100) NOT NULL default '2',
 
`user_active_cp` enum('YES','NO') NOT NULL default 'YES',
 
`pais` varchar(50) NOT NULL default '',
 
`sexo` tinyint(2) NOT NULL default '0',
 
`nacimiento` date NOT NULL default '0000-00-00',
 
`acceso_priv` int(1) NOT NULL default '1',
 
`acceso_lista_priv` text NOT NULL,
 
`contenido_extra` text NOT NULL,
 
`perfil_extra` text NOT NULL,
 
`grupo_id` int(10) NOT NULL default '1',
 
PRIMARY KEY (`user_id`),
 
KEY `uid` (`user_id`),
 
KEY `uname` (`username`),
 
KEY `user_session_time` (`user_session_time`),
 
FULLTEXT KEY `user_avatar` (`user_avatar`),
 
FULLTEXT KEY `user_avatar_2` (`user_avatar`)
 
) TYPE=MyISAM AUTO_INCREMENT=113566 ;
 
-- 
 
-- Volcar la base de datos para la tabla `nuke_users`
 
-- 
 
INSERT INTO `nuke_users` VALUES (48846, '', '123stella', '[email protected]', '', '', '', 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'bed80749f34608108def336c', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, 'spanish', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
INSERT INTO `nuke_users` VALUES (80979, '', '123stella', '[email protected]', '', '', '', 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'bed80749f346008108def336c', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, 'spanish', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
INSERT INTO `nuke_users` VALUES (100576, '', '123stella', '[email protected]'., '', '', '', 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'bed80749f3469037e008108def336c', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, 'spanish', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
INSERT INTO `nuke_users` VALUES (14320, '', '130n', '[email protected]', '', '', 'blank.gif', 108660, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'd3dd22a3c30e02c9c0cf04277689', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, '', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
INSERT INTO `nuke_users` VALUES (68841, '', '130n', '[email protected]', '', '', '', 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'd3dd22a5498cf689', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, 'spanish', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
INSERT INTO `nuke_users` VALUES (88370, '', '130n', '[email protected]', '', '', '', 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'd3dd22a54902c9277689', 10, '', 0, 0, 0, '', 0, '', '', 4096, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 10, NULL, 'spanish', 'D M d, Y g:i a', 0, 0, 0, NULL, 1, 1, 1, 1, 1, 1, 0, 0, 0, 3, NULL, NULL, NULL, 0, 2, '2', 'YES', '', 0, '0000-00-00', 1, '', '', '', 1);
 
 
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com

Última edición por swishts; 03/03/2005 a las 17:10
  #20 (permalink)  
Antiguo 04/03/2005, 01:48
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Swishts, con lo que yo te puse, sólo tienes que hacer el php, aunque lo puedes ejecutar directamente desde el phpmyadmin, sin necesidad de hacer un programa.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #21 (permalink)  
Antiguo 04/03/2005, 07:03
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Lo he intentado de forma local y en la web, pero no me funciona, y ofresco dinero porque me siento incomodo molestando... pero si saben la solucion agradesco cualquier ayuda al que quiera darla.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #22 (permalink)  
Antiguo 04/03/2005, 07:24
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
¿qué error te da para que no te funcione?
__________________
Estoy contagiado de Generación-I
  #23 (permalink)  
Antiguo 04/03/2005, 07:36
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
No me he dado cuenta que lo que puse sólo funciona si tienes una versión de mysql que admita subconsultas, aparte que tiene un pequeño error.
Te adjunto código php que te puede servir para hacerlo.
Código PHP:
<?
mysql_connect 
("servidor""usuario""clave");
mysql_select_db ("basededatos");

// seleccionamos sólo los usuarios repetidos y nos quedamos con el id más bajo
$SQL="select usuario, min (user_id) userid, count(*) cuenta ";
$SQL.=" from nuke_users group by 1 having count(*) > 1";
$resultado=mysql_query($SQL);
while ( 
$fila=mysql_fetch_array($resultado) ) 
{
     if ( 
$fila["cuenta"] > // esto se podría obviar, pero por si quieres quitar el having
     
{
         echo 
"Borrando: ".$fila["usuario"]." <br />";
         
$SQL2="delete from nuke_users where user_id!=".$fila["userid"]." and usuario='".$fila["usuario"];
         
mysql_query($SQL2);
     }
}

?>
Un saludo y ya dirás.
__________________
Estoy contagiado de Generación-I
  #24 (permalink)  
Antiguo 04/03/2005, 11:47
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
No se pudo, me dice:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\borrar.php on line 9

Saludos.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #25 (permalink)  
Antiguo 04/03/2005, 11:55
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Y la respuesta a esto
---------------

DELETE FROM nuke_users WHERE user_id NOT IN (

SELECT MIN( user_id )
FROM nuke_users
GROUP BY username
)
----------
es esto:

#1093 - You can't specify target table 'nuke_users' for update in FROM clause
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #26 (permalink)  
Antiguo 04/03/2005, 20:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 9 meses
Puntos: 0
Hace una cosa. Para que no lo hagas desde el archivo de PHP, bajate el programita SQLYog. Con este vas a poder ejecutar sentencias SQL sin ningún problema. Una vez que lo instalaste, que es bien fácil. hace lo que te dijo Vicent, lo que te dije yo pense que iva a funcionar pero Vince tiene razón, no puedo seleccionar datos de la tabla que los voy a borrar. Así que hace lo que te dijo él.

1- Instalas el programa.
2- Creas una tabla temporal:
En el SQLYog seleccionas la BD y copias esto y después apretas F5:

create temporary table quedan_users (usuario varchar(20), user_id integer);

3- Copias los datos que no queres borrar a la tabla temporal. Haces esto y después apretas F5:

insert into quedan_users (usuario, user_id)
select usuario, min(user_id)
from nuke_users group by 1

4- Borras los datos duplicados de la tabla original. Pero como no podés borrarlo de la misma tabla lo que haces es decirle borrame todo menos lo que aparece en la tabla temporal (que es donde estan los que no queres borrar). Y por último haces esto y después apretas F5:

delete from nuke_users
where not user_id in (select user_id from quedan_users);

5- Adíos y hacelo que es fácil. Pero primero bajate el SQLYog.
Para bajarlo hacés click acá: Download

6- Decinos como te fué.

Última edición por javier_82; 04/03/2005 a las 20:57
  #27 (permalink)  
Antiguo 05/03/2005, 08:55
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Uff, ya era hora, me fue perfecto, pase de 113000 registros a 18000.
Solo que tengo que crear en la temporal todos los campos que me faltan (unos 75 incluyendo username y user_id), creo que copiando la tabla original a una temporal y vaciandola tendre todos los campos creados. Luego pasaria todos los no repetidos a la temporal y estaria listo.

Saludos y millones de gracias.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #28 (permalink)  
Antiguo 05/03/2005, 12:06
Avatar de swishts  
Fecha de Ingreso: noviembre-2002
Ubicación: Uruguay
Mensajes: 209
Antigüedad: 22 años
Puntos: 0
Donde me muestra error es en el paso 4

delete from nuke_users
where not user_id in (select user_id from quedan_users);

Me dice:

Error Code : 1064
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select user_id from quedan_users)' at line 1
(941 ms taken)

Todo lo hice con ese programa que mensionas, talves sea porque le faltan los otros campos?, porque ahora que me doy cuenta tengo que pasar tambien los passwords de cada uno de ellos a la tabla.
__________________
--------------------------
QUINCHOS WILFREDO, http://www.quinchoswilfredo.com
  #29 (permalink)  
Antiguo 07/03/2005, 02:24
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
Cita:
Iniciado por swishts
Donde me muestra error es en el paso 4

delete from nuke_users
where not user_id in (select user_id from quedan_users);
la consulta debería ser

Código:
delete from nuke_users
where user_id not in (select user_id from quedan_users);
el not está asociado al in y no al campo

con esto debería funcionarte

Un saludo
  #30 (permalink)  
Antiguo 07/03/2005, 04:14
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Xaquin, el problema no está en el not, realmente da igual que lo pongas en un lado que en el otro, el problema está, seguramente, que tiene una versión de mysql que no admite las subqueries, por eso le puse la rutina en php.
Esa rutina es la base, no la probé, es cuestión de depurarla.
Un saludo.
__________________
Estoy contagiado de Generación-I
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:36.