Foros del Web » Programando para Internet » PHP »

comparar registros en ciclo while y descartar repetidos

Estas en el tema de comparar registros en ciclo while y descartar repetidos en el foro de PHP en Foros del Web. hola forer@s de una consulta obtengo varios registros, de estos tengo id, nombre, clave entre otras cosas. De estos registros algunos nombres pueden estar repetidos. ...
  #1 (permalink)  
Antiguo 08/10/2012, 19:10
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
comparar registros en ciclo while y descartar repetidos

hola forer@s

de una consulta obtengo varios registros, de estos tengo id, nombre, clave entre otras cosas.

De estos registros algunos nombres pueden estar repetidos. Sin obtener exito en hacerlo desde la consulta y sin poder normalizar la tabla y prevenir estos sucesos, no me queda mas remedio que arreglarlo desde php al momento de obtener los valores de la consulta:

Código PHP:
Ver original
  1. <?php
  2. $query = "SELECT clave, nombre, LEFT(fecha_nacim, 5) FROM cumpleaneros WHERE LEFT(zfecha_nacim, 5) = '$fecha_hoy' GROUP BY znombre ORDER BY clave ASC";
  3. $result = mysql_query($query) or die ('La consulta fall&oacute;: ' . mysql_error());
  4.     ?>
  5.     <table id="cumpleaneros">
  6.         <tr>
  7.             <th>Clave</th>
  8.             <th>Nombre</th>
  9.         </tr>
  10.         <?php
  11.         while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  12.             //aqui comparar algo asi como
  13.                         $nombre_actual=$row['nombre'];
  14.                         $nombre_siguiente=?????
  15.                         if($nombre_actual==$nombre_siguiente){
  16.                                    $nombre=$nombre_actual;
  17.                         }
  18.         ?>
  19.             <tr>
  20.                 <td><?php echo $row['clave'] ?></td>
  21.                 <td><?php echo $nombre ?></td>
  22.             </tr>
  23.         <?php
  24.         }
  25.         ?>
  26.     </table>

Como puedo comparar un registro actual con el que seria el siguiente??

O de que otra forma se puede hacer?

Por ejemplo tengo:

id:1
nombre:fukencio
clave:12345

id:2
nombre:trollencio
clave:21345

id:3
nombre:fukencio
clave:31245

y que solo me muestre (tomando en cuenta que puede ser cualquier id y en cualquier orden) :

id:1
nombre:fukencio
clave:12345

id:2
nombre:trollencio
clave:21345



Gracias por su tiempo
  #2 (permalink)  
Antiguo 09/10/2012, 00:01
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: comparar registros en ciclo while y descartar repetidos

Buenas!

Según veo comparas los nombres, ¿Cierto?

De este modo, yo haría algo así:

Código PHP:
Ver original
  1. $lim = array();//array de control
  2.  
  3. while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  4.     $entra = true; //variable de control
  5.  
  6.     for($i=0;$i<count($lim);$i++){ //recorremos el array de contol
  7.         $aux = $lim[$i];/*almacenamos el registro de control (esto es opcional, lo he dejado así para que se vea más claro el código*/
  8.  
  9.         if($aux['nombre'] == $row['nombre']{//si está en el array de control
  10.             $entra = false; //lo indicamos
  11.             break; //sal del bucle
  12.         }
  13.     }
  14.  
  15.     if($entra){//si no está en el array de control
  16.         $lim[] = $row; //lo añadimos
  17.     }
  18. }

Al final tendrás el array "limpio" en $lim.


Espero te sirva.

Saludos!!
  #3 (permalink)  
Antiguo 09/10/2012, 07:35
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: comparar registros en ciclo while y descartar repetidos

hola probe tu codigo y me sigue mostrando nombres repetidos

Código PHP:
Ver original
  1. <?php
  2. $lim = array();//array de control
  3. while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  4.        $entra = true; //variable de control
  5.     for($i=0;$i<count($lim);$i++){ //recorremos el array de contol
  6.         $aux = $lim[$i];//almacenamos el registro de control (esto es opcional, lo he dejado así para que se vea más claro el código
  7.         if($aux['nombre'] == $row['nombre']){//si está en el array de control
  8.             echo "si"; //este echo no se muestra
  9.             $entra = false; //lo indicamos
  10.             break; //sal del bucle
  11.         }
  12.     }
  13.     if($entra){//si no está en el array de control
  14.         $lim[] = $row; //lo añadimos
  15.     }
  16. }
  17. ?>
  #4 (permalink)  
Antiguo 09/10/2012, 07:46
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: comparar registros en ciclo while y descartar repetidos

Cuando hay datos repetidos te hace el echo?

Vaya... pensé que te serviría... debe haber algún error por algún sitio...

La idea del algoritmo que te he propuesto se basa en que, para cada registro se comprueban los nombres ya insertados. En caso de no estar insertado lo añade.

Si no te entra en el echo (es decir, no detecta los repetidos) cambia

Código:
if($aux['nombre'] == $row['nombre'])
por

Código:
if(strtoupper($aux['nombre']) == strtoupper($row['nombre']))
Saludos!
  #5 (permalink)  
Antiguo 09/10/2012, 07:53
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: comparar registros en ciclo while y descartar repetidos

intenta así

Código PHP:
<?php
for($nombres=array();$row=mysql_fetch_array($resultMYSQL_ASSOC);$nombres[$row['nombre']]=$row['clave']){
        if(!
$nombres[$row['nombre']]){
        
?>
            <tr>
                <td><?php echo $row['clave'?></td>
                <td><?php echo $row['nombre'?></td>
            </tr>
       <?php
}} ?>
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 09/10/2012, 08:01
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: comparar registros en ciclo while y descartar repetidos

Es curioso, he probado el mismo algoritmo con una tabla con datos similares y me funciona...

La forma de stramin también me parece buena, y desde luego es más compacta.

Saludos
  #7 (permalink)  
Antiguo 09/10/2012, 11:42
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: comparar registros en ciclo while y descartar repetidos

hola gracias por sus respuestas!

si algo extraño ocurre DoHITB

stramin probe y parece que si excluye los repetidos, solo que salta un error:

Notice: Undefined index: FUKENCIO LOPEZ in C:\wamp\www\proyecto\carpeta\archivo.php on line 90

la linea 90 es:

Código PHP:
if(!$nombres[$row['nombre']]){ 
el error aparece x cada nombre que hay
  #8 (permalink)  
Antiguo 09/10/2012, 13:47
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: comparar registros en ciclo while y descartar repetidos

Vaya... suena como si desde PHP se intentara acceder a un índice dado por el valor de la columna a la que accedes :S

Prueba una cosa, a ver si salimos de dudas:

- Lanza el SQL
- Recogelo
- Itera sobre el resultado y haz un volcado

Sería algo así:

Código PHP:
Ver original
  1. while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  2.     print_r($row);
  3. }

Pega los resultados y así veremos qué está pasando con los arrays que se forman...

Saludos!
  #9 (permalink)  
Antiguo 09/10/2012, 15:02
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: comparar registros en ciclo while y descartar repetidos

cambia esa linea por esta:

if(!isset($nombres[$row['nombre']])){

y todo debería salir bien :D
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #10 (permalink)  
Antiguo 09/10/2012, 17:33
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: comparar registros en ciclo while y descartar repetidos

muchas gracias!!

gracias por su tiempo!!
  #11 (permalink)  
Antiguo 05/06/2013, 14:29
 
Fecha de Ingreso: junio-2013
Mensajes: 3
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: comparar registros en ciclo while y descartar repetidos

Hola... soy algo novado y tengo duda... al compara registros ya que deseo un menu... pedo basandome en una tabla... que que contiene la categoría y otra que se llama producto y contiene el nombre del producto. etc. pero cada que mando ha llamar y lo itero me manda repetidos los registros
por ejemplo...
Baguetts
Bebidas y Sodas
PIZZAS
PIZZAS
PIZZAS
PIZZAS
PIZZAS
PIZZAS

esas repetiones se deben a que encontro a varios productos que contienen la categoria... por su ayuda mil gracias...
  #12 (permalink)  
Antiguo 05/06/2013, 14:58
Avatar de wizanchez  
Fecha de Ingreso: junio-2013
Ubicación: bogota
Mensajes: 120
Antigüedad: 10 años, 10 meses
Puntos: 6
Respuesta: comparar registros en ciclo while y descartar repetidos

Cita:
Iniciado por Satdae Ver Mensaje
Hola... soy algo novado y tengo duda... al compara registros ya que deseo un menu... pedo basandome en una tabla... que que contiene la categoría y otra que se llama producto y contiene el nombre del producto. etc. pero cada que mando ha llamar y lo itero me manda repetidos los registros
por ejemplo...
Baguetts
Bebidas y Sodas
PIZZAS
PIZZAS
PIZZAS
PIZZAS
PIZZAS
PIZZAS

esas repetiones se deben a que encontro a varios productos que contienen la categoria... por su ayuda mil gracias...
-deberias crear un nuevo tema un poco llevado mas al codigo

Etiquetas: descartar, mysql, registro, registros, repetidos, tabla, ciclos
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 03:04.