Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Anadir numero a duplicados PHP

Estas en el tema de Anadir numero a duplicados PHP en el foro de PHP en Foros del Web. Hola... Os agradeceria que me ayudarais a acercarme a la solucionde un pequeno problemilla. En una lista que produzco en PHP desde una base de ...
  #1 (permalink)  
Antiguo 21/10/2013, 16:41
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Anadir numero a duplicados PHP

Hola...

Os agradeceria que me ayudarais a acercarme a la solucionde un pequeno problemilla. En una lista que produzco en PHP desde una base de datos MySQL, se generan entradas duplicadas (titulos de canciones):

Código PHP:
while ($row mysqli_fetch_array($results)) {

    
$duplicated $row['titulos'] ."<br>";

Cita:
// Resultado:
vivir lo nuestro
vivir lo nuestro
a nuestro modo
a nuestro modo
que llueva cafe
que llueva cafe
cancion desesperada
cancion desesperada
(...)
La idea es que en un campo del tipo 'INT(10)' de MySQL, se agregue un numero igual para cada uno de los pares que se repiten, mas o menos asi:

Cita:
// Resultado:
vivir lo nuestro 1
vivir lo nuestro 1
a nuestro modo 2
a nuestro modo 2
que llueva cafe 3
que llueva cafe 3
cancion desesperada 4
cancion desesperada 4
(...)
Como podria hacerlo primero en PHP, antes de integrarlo a mi query?

Gracias por vuestra ayuda.
__________________
Andrew :P
  #2 (permalink)  
Antiguo 21/10/2013, 17:05
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 11 años, 1 mes
Puntos: 43
Respuesta: Anadir numero a duplicados PHP

Si entendi bien, podés usar dos variables que vayan contando, $x e $y.

Código PHP:
Ver original
  1. $x = 0;
  2. $y = 1;
  3. while ($row = mysqli_fetch_array($results)) {
  4.     $duplicated = $row['titulos'] ." $y<br>";
  5.    
  6.     $x++;
  7.  
  8.     if ($x % 2 == 0) {
  9.         $y++;
  10.     }
  11. }
  #3 (permalink)  
Antiguo 22/10/2013, 01:35
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Anadir numero a duplicados PHP

Hey Cuervoo....

Muchas gracias por tu ayuda!... Funciona de maravilla.

Entiendo todo el proceso, excepto la parte de:

Código PHP:
if ($x == 0) {
        
$y++;
    } 
Qué es el "%"?

Gracias por tu magnífica ayuda!!!!
__________________
Andrew :P
  #4 (permalink)  
Antiguo 22/10/2013, 04:25
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Anadir numero a duplicados PHP

Hola...

Una pregunta más...

Qué pasa si en la tabla hay mùas de un record duplicado?

De hecho con la parte de la formula:

Código PHP:
if ($x == 0) {
        
$y++;
    } 
parece que se refiera a dos records, si cambio el '2' por '3' admite tres records, como mínimo... Y si hay un número incongruente de registros duplicados, cómo puedo adaptarlo?

Gracias
__________________
Andrew :P
  #5 (permalink)  
Antiguo 22/10/2013, 04:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Anadir numero a duplicados PHP

Cita:
Iniciado por andrewp Ver Mensaje
Como podria hacerlo primero en PHP, antes de integrarlo a mi query?
En realidad lo puedes hacer tanto desde PHP, como desde la propia consulta en SQL, en especial siendo MySQL lo que usas.
Lo que no me queda claro es qué es lo que necesitas lograr, si eliminar repeticiones o solamente detectarlas...
¿Cuál es el objetivo final?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/10/2013, 04:45
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Anadir numero a duplicados PHP

Gracias gnzsoloyo... Lo que necesito es detectarlas y añadir el mismo número asignado a cada repetición en una nueva columna de la tabla. Pero antes de añadirla a la nueva columna en la tabla, quiero hacer un print y verificar en pantalla si el número asignado es el mismo para cara repetición.
__________________
Andrew :P
  #7 (permalink)  
Antiguo 22/10/2013, 04:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Anadir numero a duplicados PHP

Mi pregunta a punta más que a PHP, a entender el problema desde la lógica de Bases de Datos, por eso pregunto qué es lo que quieres hacer luego o cuál es el sentido de esa columna, porque desde ese ángulo no se entiende la utilidad de o que dices.
En principio, como te dije, eso se puede obtener directamente en la consulta sin necesidad de crear una columna en la tabla. Hay métodos en MySQL que lo permiten, y con los cuales la consulta te devolveria una columna adicional (no física en tabla) con esa numeración.
Por otro lado, me queda la duda, más allá de lo que quieres hacer, acerca de qué uso le darás luego a ese dato en la tabla... ¿Será alguna clave de algún tipo?

En cuanto a PHP, no hay mucho por donde dudar: Primero tienes que obtener el array completo, consultando la tabla ordenada a la cual le hayas agregado una columna para este uso:

Código PHP:
Ver original
  1. $query = "SELECT a, b, c, d, 1 e FROM tabla order by a";
La columna "e" es una columna virtual que contiene un valor 1.
Luego hacer un foreach donde vas comparando el valor del registro anterior con el del siguiente, y cuando son diferentes sumas uno a ese.
¿Te sirve esa descripción o necesitas el código?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 22/10/2013, 05:21
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Anadir numero a duplicados PHP

Mil gracias por tu respuesta...

Me explico un poco más... La idea de imprimirlo en pantalla, es porque el editor quiere ver los registros con ese número antes de enviarlos por una query a la base de datos.

En fin, tengo el siguiente listado que he extraido con la primera query (primer post) y que guardo en la variable '$duplicados':

Cita:
vivir lo nuestro
vivir lo nuestro
a nuestro modo
a nuestro modo
que llueva cafe
que llueva cafe
que llueva cafe
cancion desesperada
cancion desesperada
La idea es que si hay un duplicado, se pueda ver por pantalla el número asignado (siguiendo u npoco la formula de Cuervoo):

Cita:
vivir lo nuestro 1
vivir lo nuestro 1
a nuestro modo 2
a nuestro modo 2
que llueva cafe 3
que llueva cafe 3
que llueva cafe 3
cancion desesperada 4
cancion desesperada 4
Pero con la formula que me proporciono Cuervoo, obtengo lo siguiente:

Cita:
vivir lo nuestro 1
vivir lo nuestro 1
a nuestro modo 2
a nuestro modo 2
que llueva cafe 3
que llueva cafe 3
que llueva cafe 4
cancion desesperada 4
cancion desesperada 6
Es decir, en el título "que llueva cafe", hay tres que se repiten, y el código asigna el mismo número sólo hasta el segundo.

He intentado cambiar esa parte de la formula así:

Código PHP:
if ($x == 0) {
        
$y++;
    } 
Es decir, cambiar el 2 por el 3, pero me da el siguiente resultado:

Cita:
vivir lo nuestro 1
vivir lo nuestro 1
a nuestro modo 1
a nuestro modo 2
que llueva cafe 2
que llueva cafe 2
que llueva cafe 3
cancion desesperada 3
cancion desesperada 3
Que por su puesto no tiene sentido. Así, creo que la formula de Cuervoo esta muy cerca, pero debería tener en cuenta "cuando cualquier línea se repita" y no solo dos de ellas.

Luego ya me encargarùe de meter ese valor en la query en una nueva columna que contenga los números por línea.

Gracias...
__________________
Andrew :P
  #9 (permalink)  
Antiguo 22/10/2013, 05:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Anadir numero a duplicados PHP

Bueno, probemos reemplazando tu query con algo así:
Código MySQL:
Ver original
  1. SELECT titulo, ID
  2.     SELECT titulo, IF(@tit != titulo, @id := @id + 1, @id) ID, IF(@tit != titulo, @tit := titulo, @tit) tit
  3.     FROM TITULOS JOIN (SELECT @tit:='', @id:=0)
  4.     ORDER BY titulo
  5.     );
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 22/10/2013, 06:10
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Anadir numero a duplicados PHP

Una pregunta... la opción:

Cita:
@tit != titulo
se refiere a que sean únicos en la columna?
__________________
Andrew :P
  #11 (permalink)  
Antiguo 22/10/2013, 06:17
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 8 meses
Puntos: 96
Respuesta: Anadir numero a duplicados PHP

Que @tit es.distinto de titulo
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #12 (permalink)  
Antiguo 22/10/2013, 06:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Anadir numero a duplicados PHP

Cita:
Iniciado por andrewp Ver Mensaje
Una pregunta... la opción:



se refiere a que sean únicos en la columna?
Una duda: ¿En qué lenguaje has visto que ese "!=" signifique "únicos"?


Nota: Para buscar únicos en SQL no se usa eso...

Prueba lo que te propongo manualmente con el phpMyadmin, porque puede que haya que afinarla. La estoy escribiendo de memoria.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: duplicados, mysql, numero
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 12:09.