Foros del Web » Programando para Internet » PHP »

Ayuda como no mostrar resultados iguales en while

Estas en el tema de Ayuda como no mostrar resultados iguales en while en el foro de PHP en Foros del Web. hola tengo un serio problema, seguramente hay soluciones mas simple les paso a explicar de la forma mas entendible y corta: tengo un sistema tipo ...
  #1 (permalink)  
Antiguo 24/06/2010, 22:31
 
Fecha de Ingreso: febrero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Exclamación Ayuda como no mostrar resultados iguales en while

hola tengo un serio problema, seguramente hay soluciones mas simple les paso a explicar de la forma mas entendible y corta:

tengo un sistema tipo eshop, con la tabla:

Productos

id-iddistribuidor-idtipo-nombre-.imagen,etc...

Tipo

id-nombre


mi problema es que a la hora de mostrar los productos tambien tengo que poner una lista desplegable que filtre los tipos de productos.

tengo la idea de como hacer todo pero me falta solo 1 cosa

como hago para que un while no me muestre los resultados iguales, osea...

tipo de producto 1
tipo de producto 1
tipo de producto 1
tipo de producto 1
tipo de producto 2
tipo de producto 2
tipo de producto 2

solo preciso que me muestre

tipo de producto 1
tipo de producto 2

esto me sucede porque hago un while dentro de otro, pero bueno, no recordaba otra alternativa, les dejo el fragmento de PHP

Código PHP:
<?php
                $qry
=mysql_query"SELECT * FROM productos WHERE iddis=".$_REQUEST['iddis']." order by idtipo ASC") ;
                if(
mysql_num_rows($qry)>=1){
                 while(
$row mysql_fetch_array($qry)){;
                
$imagen=$row['imagen'];
                
$nombre=$row['nombre'];
                
$idtipo=$row['idtipo'];
                
$contenido=$row['contenido'];

                
?>
            <select name="filtro">
            <?php
                $qry3
=mysql_query"SELECT * FROM tipo WHERE id = '".$idtipo."' ORDER BY nombre ") ;
                while(
$row3 mysql_fetch_array($qry3)){;
                
?>
              <option value="<?=$row3['id'];?>"><?=$row3['nombre'];?></option>
              <?php
                
};};
              
?>
            </select>

Última edición por coken; 24/06/2010 a las 22:40
  #2 (permalink)  
Antiguo 24/06/2010, 22:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda como no mostrar resultados iguales en while

Usa un SELECT DISTINCT para seleccionar diferentes resultados.

Saludos.
  #3 (permalink)  
Antiguo 24/06/2010, 23:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
emmm, algo mas de explicacion o ejemplo¿?

Cita:
Iniciado por GatorV Ver Mensaje
Usa un SELECT DISTINCT para seleccionar diferentes resultados.

Saludos.
lo probe de este modo:

Código PHP:

 <?php
                $qry3
=mysql_query"SELECT DISTINCT id, nombre FROM tipo WHERE id = '".$idtipo."' ORDER BY nombre ") ;
                while(
$row3 mysql_fetch_array($qry3)){;
                
?>
              <option value="<?=$row3['0'];?>"><?=$row3['1'];?></option>
              <?php
                
};};
              
?>

pero sigue repitiendoce, recorda que es un while dentro de otro, calculo que por eso se repite pero no veo otra forma de hacerlo, ya que join no creo q me sirva

Última edición por GatorV; 25/06/2010 a las 08:41
  #4 (permalink)  
Antiguo 25/06/2010, 01:10
Avatar de eZakto  
Fecha de Ingreso: julio-2008
Mensajes: 214
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda como no mostrar resultados iguales en while

Creo que lo que buscas es group by.

Saludos.
__________________
eZakto™
  #5 (permalink)  
Antiguo 25/06/2010, 10:00
 
Fecha de Ingreso: febrero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Ayuda como no mostrar resultados iguales en while

Cita:
Iniciado por eZakto Ver Mensaje
Creo que lo que buscas es [URL="http://dev.mysql.com/doc/refman/5.0/es/group-by-modifiers.html"]group by[/URL].

Saludos.
tampoco, porque no me permite el WHERE

Código PHP:
                <?php
            
                $color
=array("#ffffff","#F5F5F5");
                
$contador=0
                
$qry=mysql_query"SELECT * FROM productos WHERE iddis=".$_REQUEST['iddis']." order by idtipo ASC") ;
                if(
mysql_num_rows($qry)>=1){
                 while(
$row mysql_fetch_array($qry)){;
                
$imagen=$row['imagen'];
                
$nombre=$row['nombre'];
                
$idtipo=$row['idtipo'];
                
$contenido=$row['contenido'];

                
?>
            <select name="filtro">
            <?php
                $qry3
=mysql_query"SELECT nombre,id FROM tipo WHERE id = '".$idtipo."' GROUP BY id ORDER BY nombre DESC") ;
                while(
$row3 mysql_fetch_array($qry3)){
                
?>
              <option value="<?=$row3['1'];?>"><?=$row3['0'];?></option>
              <?php
                
};};
              
?>
            </select>
  #6 (permalink)  
Antiguo 26/06/2010, 05:34
 
Fecha de Ingreso: junio-2002
Mensajes: 750
Antigüedad: 21 años, 10 meses
Puntos: 22
Respuesta: Ayuda como no mostrar resultados iguales en while

Quizá en lugar de usar dos while, uno dentro de otro y reducir la cantidad de consultas o peticiones realizadas a la base de datos puedes usar dos consultas.
En la primera consulta obtienes el tipo de producto y rellenas la lista desplegable:
Código PHP:
Ver original
  1. <?php
  2. // consulta para obtener los tipos de producto
  3. $tipos=mysql_query( "SELECT * FROM tipo ORDER BY nombre");
  4.  
  5. // crear y rellenar lista de tipo de producto
  6. ?>
  7. <select name="filtro">
  8. <?php
  9. while( $row3 = mysql_fetch_array($tipos) ){
  10. ?>
  11. <option value="<?=$row3['1'];?>"><?=$row3['0'];?></option>
  12. <?php
  13. }
  14. ?>
  15. </select>

Para la consulta de productos supongo que puedes dejarla más o menos como la tenías:
Código PHP:
Ver original
  1. mysql_query( "SELECT * FROM productos WHERE iddis=".$_REQUEST['iddis']." order by idtipo ASC");

Y para aplicar el filtro:
Código PHP:
Ver original
  1. $sql="SELECT * FROM productos WHERE iddis=$_REQUEST['iddis']";
  2. if($_POST['idtipo']){
  3. $sql .= " AND idtipo=$_POST['idtipo']";
  4. }
  5.  
  6. $contenidoFiltrado=mysql_query( $sql);

Es posible que en estos ejemplos se encuentren errores de escritura o de uso de comillas o falta de {$_POST['idtipo']}, etc. (hace tiempo que no programo)

El código se vería más limpio usando clases y sin mezclar tanto código php con html...
  #7 (permalink)  
Antiguo 26/06/2010, 11:37
 
Fecha de Ingreso: febrero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Ayuda como no mostrar resultados iguales en while

el tema de este consejo que me decís, es que de esa manera me mostraría todos los tipos de productos, y yo necesito que me muestre solo los tipos de producto que se están mostrando en ese distribuidor
  #8 (permalink)  
Antiguo 26/06/2010, 12:23
 
Fecha de Ingreso: junio-2002
Mensajes: 750
Antigüedad: 21 años, 10 meses
Puntos: 22
Respuesta: Ayuda como no mostrar resultados iguales en while

PHP:¿Cómo hacer una lista desplegable (select) con valores de una tabla Mysql que dependa del valor seleccionado en la primera?

o quizá pueda servir con una sola consulta donde obtengas toda la información requerida para rellenar los campos, listas desplegables...
Código SQL:
Ver original
  1. SELECT DISTINCT productos.id, productos.iddistribuidor, productos.idtipo, productos.nombre, tipo.nombre
  2. FROM productos, tipo
  3. WHERE productos.iddistribuidor=$_REQUEST['iddis']
  4. AND tipo.id=productos.idtipo;

o usar JOIN (LEFT JOIN...) o SELECTs anidados...
  #9 (permalink)  
Antiguo 26/06/2010, 15:46
 
Fecha de Ingreso: febrero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Ayuda como no mostrar resultados iguales en while

te amo

solucionado de este modo:

Código PHP:
            Filtro de categorias:
            <select name="filtro">
                <?php
                $color
=array("#ffffff","#F5F5F5");
                
$contador=0
                
$qry=mysql_query"SELECT DISTINCT productos.iddis, productos.idtipo, tipo.id, tipo.nombre FROM productos, tipo 
WHERE productos.iddis="
.$_REQUEST['iddis']." AND tipo.id=productos.idtipo") ;
                if(
mysql_num_rows($qry)>=1){
                 while(
$row mysql_fetch_array($qry)){
                
$imagen=$row['imagen'];
                
$nombre=$row['nombre'];
                
$idtipo=$row['idtipo'];
                
$contenido=$row['contenido'];

                
?>
              <option value="<?=$row['id'];?>"><?=$row['nombre'];?></option>
              <?php
                
};
              
?>
            </select>

Etiquetas: filtrar, sql
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 05:31.