B
blogers
Pi
SEO
SELECT description, COUNT(*) as total FROM mitabla
GROUP BY description
HAVING COUNT(*) > 1;
lo que puedes hacer primeramente es comparar si todo el texto ya se encuentra en la base, con un select count, y si la misma devuelve algo, le muestras en mensaje que ya existe en la base una descripcion igual o parecida.
<?php
$descripcion = trim(mysqli_real_scape_string($_POST['descripcion']));
$sql = db_query("select count(1) from tabla where trim(descripcion) = '$descripcion'");
list($existe) = mysqli_fetch_row($sql);
if ($existe > 0)
{
echo 'Error: Ya existe descripcion';
}else{
//continua su rumbo...
}
?>
Un ejemplo mio seria asi:
PHP:<?php $descripcion = trim(mysqli_real_scape_string($_POST['descripcion'])); $sql = db_query("select count(1) from tabla where trim(descripcion) = '$descripcion'"); list($existe) = mysqli_fetch_row($sql); if ($existe > 0) { echo 'Error: Ya existe descripcion'; }else{ //continua su rumbo... } ?>
<?php
//vemos todos los duplicados
$sql = db_query("SELECT description, COUNT(*) as total FROM mitabla GROUP BY description HAVING COUNT(*) > 1");
while ($row = mysqli_fetch_assoc($sql))
{
//borramos el duplicado
$sql2 = db_query("select max(id_registro) from mitabla where descripcion = '". $row['description'] ."'");
list($id_registro) = mysqli_fetch_row($sql2);
db_query("delete from mitabla where id_registro = $id_registro");
}
?>
Un ejemplo de borrado seria algo asi
PHP:<?php //vemos todos los duplicados $sql = db_query("SELECT description, COUNT(*) as total FROM mitabla GROUP BY description HAVING COUNT(*) > 1"); while ($row = mysqli_fetch_assoc($sql)) { //borramos el duplicado $sql2 = db_query("select max(id_registro) from mitabla where descripcion = '". $row['description'] ."'"); list($id_registro) = mysqli_fetch_row($sql2); db_query("delete from mitabla where id_registro = $id_registro"); } ?>
Es algo rapido que se me ocurre como solucion, puedes duplicar tu BD y hacer en otra BD una prueba con el script y ver si te funciona como quieres.
[01-Oct-2013 16:32:49 America/New_York] PHP Warning: array_key_exists() expects parameter 2 to be array, null given in /home/bolsa/public_html/conf.php on line 24
[01-Oct-2013 16:32:49 America/New_York] PHP Warning: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home/bolsa/public_html/listado/duplicados.php:1) in /home/bolsa/public_html/conf.php on line 63
[01-Oct-2013 16:32:49 America/New_York] PHP Warning: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home/bolsa/public_html/listado/duplicados.php:1) in /home/bolsa/public_html/conf.php on line 63
[01-Oct-2013 16:32:49 America/New_York] PHP Fatal error: Call to undefined function db_query() in /home/bolsa/public_html/listado/duplicados.php on line 7
El primer ejemplo que te pase es por si queres evitar que se duplique al querer guardar, pero si queres un cron, entonces la segunda opcion que te pase seria lo mas indicado ya que hace lo que necesitas, aunque lo debes probar 🙄
Pd.: esto es contestando a tu mp a traves de aqui jeje..
te pase por mp un ejmplo de lo que necesitas, pero debes adaptar las conexiones a la base de datos y las consultas..
el db_query y demas que agregue son solo referencias..
Voy a tratar de hacer un ejemplo conciso al respecto para que puedas entender mejor.
<?php
//conexion a la base de datos
$link = mysql_connect('localhost', 'root', '');
if (!$link)
die('Error al conectarse con MySQL: ' . mysql_error().' <br>Número del error: '.mysql_errno());
if (! @mysql_select_db("bd_laboratorio",$link)){
echo "No se pudo conectar correctamente con la Base de datos";
exit();
}
//vemos todos los duplicados
$sql = mysql_query("SELECT contenido as descripcion, COUNT(*) cantidad FROM contenido_duplicado GROUP BY contenido HAVING COUNT(*) > 1");
echo 'Registros Eliminados';
while ($row = mysql_fetch_assoc($sql))
{
//borramos el duplicado
$sql2 = mysql_query("select max(id_registro) from contenido_duplicado where trim(contenido) = '". $row['descripcion'] ."'");
list($id_registro) = mysql_fetch_row($sql2);
echo '<p>Id.: ', $id_registro ,' -> descripcion: ', $row['descripcion'] ,'</p>';
mysql_query("delete from contenido_duplicado where id_registro = $id_registro");
}
?>
$link = mysql_connect('localhost', 'root', 'password');
! @mysql_select_db("bd_laboratorio",$link)
<?php
set_time_limit(0);
include('../conf.php');
//vemos todos los duplicados
$sql = mysql_query("SELECT description, COUNT(*) as total FROM staffpruebasbolsa GROUP BY description HAVING COUNT(*) > 1");
echo 'Registros Eliminados';
while ($row = mysqli_fetch_assoc($sql))
{
//borramos el duplicado
$sql = mysql_query("select max(id_registro) from staffpruebasbolsa where description = '". $row['description'] ."'");
list($id_registro) = mysqli_fetch_row($sql2);
echo '<p>Id.: ', $id_registro ,' -> description: ', $row['description'] ,'</p>';
db_query("delete from staffpruebasbolsa where id_registro = $id_registro");
}
?>
Bueno primeramente
Crea un archivo php con el nombre borrar.php
PHP:<?php //conexion a la base de datos $link = mysql_connect('localhost', 'root', ''); if (!$link) die('Error al conectarse con MySQL: ' . mysql_error().' <br>Número del error: '.mysql_errno()); if (! @mysql_select_db("bd_laboratorio",$link)){ echo "No se pudo conectar correctamente con la Base de datos"; exit(); } //vemos todos los duplicados $sql = mysql_query("SELECT contenido as descripcion, COUNT(*) cantidad FROM contenido_duplicado GROUP BY contenido HAVING COUNT(*) > 1"); echo 'Registros Eliminados'; while ($row = mysql_fetch_assoc($sql)) { //borramos el duplicado $sql2 = mysql_query("select max(id_registro) from contenido_duplicado where trim(contenido) = '". $row['descripcion'] ."'"); list($id_registro) = mysql_fetch_row($sql2); echo '<p>Id.: ', $id_registro ,' -> descripcion: ', $row['descripcion'] ,'</p>'; mysql_query("delete from contenido_duplicado where id_registro = $id_registro"); } ?>
Y ejecutarlo desde el navegador asi como me mostraste via MP..
Debes adaptar lo siguiente:
Localhost, debes cambiar por el nombre de tu server
root => tu usuario de tu servidor
password => la contraseña de tu server
Luego
bd_laboratorio => lo debes cambiar por el nombre de tu Base de datos
Y luego en las consultas debes especificar el campo de "descripcion" y el "id" principal de la tabla.
Todo lo que expuse es referencia...
Algunos pantallazos del ejemplo seria..
Y luego en las consultas debes especificar el campo de "descripcion" y el "id" principal de la tabla.
<?php
set_time_limit(0);
include('../conf.php');
//vemos todos los duplicados
$sql = mysql_query("SELECT description as description, COUNT(*) cantidad FROM staffpruebasbolsa GROUP BY description HAVING COUNT(*) > 1");
echo 'Registros Eliminados';
while ($row = mysql_fetch_assoc($sql))
{
//borramos el duplicado
$sql2 = mysql_query("select max(code) from description where trim(description) = '". $row['descripcion'] ."'");
list($id_registro) = mysql_fetch_row($sql2);
echo '<p>Id.: ', $id_registro ,' -> description: ', $row['description'] ,'</p>';
mysql_query("delete from description where code = $id_registro");
}
?>
<?php
set_time_limit(0);
include('../conf.php');
//vemos todos los duplicados
$sql = mysql_query("SELECT description as description, COUNT(*) cantidad FROM staffpruebasbolsa GROUP BY description HAVING COUNT(*) > 1");
echo 'Registros Eliminados';
while ($row = mysql_fetch_assoc($sql))
{
//borramos el duplicado
$sql2 = mysql_query("select max(codigo) from description where trim(description) = '". $row['description'] ."'");
list($id_registro) = mysql_fetch_row($sql2);
echo '<p>Id.: ', $id_registro ,' -> description: ', $row['description'] ,'</p>';
mysql_query("delete from description where codigo = $id_registro");
}
?>
y tienes el campo "id_registro" en tu tabla?
es eso lo que te mencione al final
Para borrar el toma en cuenta el "id" principal de la tabla, aquel ID que no se repetira, en mi ejemplo se llamo id_registro, en tu tabla puede llegar a tener otro nombre.. de ahi que no borra..
$sql2 = mysql_query("select max(code) from description where trim(description) = '". $row['descripcion'] ."'");
mysql_query("delete from description where code = $id_registro");
<?php
set_time_limit(0);
include('../conf.php');
//vemos todos los duplicados
$sql = mysql_query("SELECT description as descripcion, COUNT(*) cantidad FROM staffpruebasbolsa GROUP BY description HAVING COUNT(*) > 1");
echo 'Registros Eliminados';
while ($row = mysql_fetch_assoc($sql))
{
//borramos el duplicado
$sql2 = mysql_query("select max(codigo) from staffpruebasbolsa where trim(description) = '". $row['descripcion'] ."'");
list($id_registro) = mysql_fetch_row($sql2);
echo '<p>Id.: ', $id_registro ,' -> descripcion: ', $row['descripcion'] ,'</p>';
mysql_query("delete from staffpruebasbolsa where codigo = $id_registro");
}
?>
no lo borra por que le pusiste "description" en ves de nombre de tabla en las 2 ultimas consultas..
Aqui
y aqui
Esos 2 resaltados en negrita lo modificas por el nombre de tu tabla y deberia de funcionar..
el nombre de tu tabla segun el ejemplo que pasaste seria "staffpruebasbolsa"
Ahora la pregunta del millon cuando elimina borra los mas nuevos y deja el original es decir el primero que se registro ?
select max(codigo)
select min(codigo)
Como decias evitar duplicacion, pues la respuesta seria SI 🙂
Pero si crees conveniente dejar el mas nuevo pues seria cambiar solo una parte..
Buscar
Reemplazar por
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?