Foros del Web » Programando para Internet » PHP »

evitar duplicados en resultados

Estas en el tema de evitar duplicados en resultados en el foro de PHP en Foros del Web. hola gente! como puedo hacer para evitar que en un multiple select que obtiene los datos de una BD, no me duplique un mismo valor. ...
  #1 (permalink)  
Antiguo 05/09/2004, 13:28
Avatar de sakul  
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 15 años, 4 meses
Puntos: 0
evitar duplicados en resultados

hola gente!
como puedo hacer para evitar que en un multiple select que obtiene los datos de una BD, no me duplique un mismo valor.

Por ejemplo: Hay 2 registros que en el campo "barrio" figura el valor "centro", pero quiero que en el SELECT MULTIPLE aparezca una sola vez!

El código que utilizo es el siguiente:
Código PHP:
<?php
                                    $sql
="SELECT id,barrio FROM paradas"
$resultado=mysql_query($sql); 
echo 
"<select name=\"opciones[]\" multiple size=\"5\">\n"
while (
$row=mysql_fetch_array($resultado)){ 
    echo 
"<option value=\"".$row['id']."\">".$row['barrio']."</option>\n"

echo 
"</select>\n"
                                    
?>
  #2 (permalink)  
Antiguo 05/09/2004, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si tienes elementos repetidos será por qué así están en tu BD .. No por el hecho de que el "select multiple" los crea.

En principio .. sería obtener de tu consulta SQL esos registros "únicos" .. No sé por qué se repiten (deberías estudiar como evitar eso ..) pero en principio podrías usar "DISTINCT" (si hablamos que usas Mysql) para evitar los duplicados.

Código PHP:
$sql="SELECT DISTINCT id,barrio FROM paradas"
Pero, .. insisto que debes ver bien por qué se originan duplicados ya que usas ese "ID" que deberían ser únicos ..

Un saludo,
  #3 (permalink)  
Antiguo 05/09/2004, 18:27
Avatar de sakul  
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 15 años, 4 meses
Puntos: 0
Tal vez me exprese mal... los duplicados en la BD son lógicos. Se trata del campo "barrio", y puede ser que 2 personas vivan en el mismo barrio. Lo que quiero lograr es que si existen más de 1 registro con el mismo barrio, en el select multiple, sólo aparezca una vez.

Con DISTINCT logro eso????
  #4 (permalink)  
Antiguo 06/09/2004, 04:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

El problema es que para que distinct funcione, el para id y barrio tienen que se iguales. Si para un mismo barrio, tienes varios id, no hay forma. Lo que no entiendo de tu select es que pasas el valor de id, si son id distintos corresponden a distintos registros (si id es la clave primaria). ¿Es eso como pensabas que tenia que ser?

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 06/09/2004, 07:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si normalizaras mejor tu BD no tendrías ese problema ..

Me explico

Una tabla con los nombres de los "barrios" (unicos)

tabla barrios
id_barrio
nombre_barrio

Tu tabla de registro actual ..

tabla nose
id_nose
id_barrio
otros_campos_y_propiedades

Para tu "select" leerias la tabla de "barrio" con ese Identificador único .. Si quieres hacer cosas como "ver solo un listado de los barrios que hay definidos en la tabla "nose", la consulta SQL se complica un poco pero se puede hacer igualmente. Lo mejor de todo esto es que obtendrás IDentificadores Únicos y no tendrás ningún problema como el de la incosistencia que te va a dar tu BD.

Un saludo,
  #6 (permalink)  
Antiguo 07/09/2004, 20:15
Avatar de sakul  
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 15 años, 4 meses
Puntos: 0
ya lo solucioné con DISTINCT !! El SELECT a "id" no era necesario... gracias de todos modos!!
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 11:17.