Foros del Web » Programando para Internet » PHP »

Conexión a BD con valores de un Array

Estas en el tema de Conexión a BD con valores de un Array en el foro de PHP en Foros del Web. Hola a todos, a ver si alguien me echa un cable...estoy perdido! He realizado una consulta a una BD con 150 productos, donde cada uno ...
  #1 (permalink)  
Antiguo 01/09/2010, 06:05
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Conexión a BD con valores de un Array

Hola a todos, a ver si alguien me echa un cable...estoy perdido!

He realizado una consulta a una BD con 150 productos, donde cada uno de ellos tiene una tabla con el nombre del "Productor" (es_Familia). Los he recopilado y he obtenido por mysql_fetch_array y array_unique todos los productores que hay sin que me los repita en el array, dado que de los 150 productos muchos comparten productor.

Código PHP:
        $query_Productos "SELECT * FROM productos WHERE ApareceEnLaWeb = 'Si' ORDER BY es_Familia ASC";
        
$Productos mysql_query($query_Productos$bdmontsoliu) or die(mysql_error());
        
$totalRows_Productos mysql_num_rows($Productos);
        while (
$row_Productos mysql_fetch_array($Productos)){
                
$FamiliasLista[] = $row_Productos['es_Familia'];
        }
        
$ProductoresLista array_unique($FamiliasLista);
        foreach (
$ProductoresLista as $Resultado){
            echo 
'<li>'.$Resultado.'</li>';
        }
?> 
Ahora bien, quiero hacer una consulta a la base de datos para imprimir los productos de cada productor. Es decir, que quedase de cual forma una vez impreso:
  • Productor1
  • Prod1
  • Prod2
  • Prod3
  • Productor2
  • Prod1
  • Prod2
  • Productor3
  • Prod1
  • ...

Y así consecutivamente. Llevo toda la mañana y no hay forma, siempre me da error. Espero haberme explicado bien.

¿Alguien tiene una idea?

Gracias!
  #2 (permalink)  
Antiguo 01/09/2010, 08:02
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Conexión a BD con valores de un Array

Cita:
y array_unique todos los productores que hay sin que me los repita en el array, dado que de los 150 productos muchos comparten productor.
array_unique es totalmente valido. Aunque también podrías usar "GROUP_BY productor" en la sentencia sql.

Cuando estás haciendo esto:

$ProductoresLista = array_unique($FamiliasLista);

teóricamente eliminás duplicados, pero la clave de ese array es numérica y única, así que no habría duplicados. Fijate:

$FamiliasLista[] = $row_Productos['es_Familia'];

Si hacés un print_r($FamiliasLista) vas a tener un array de claves numéricas, donde cada ítem va a contener un array con información de la base de datos.

La solución es que pongas una clave vos cuando hacés el while. La que necesites:

Cita:
while ($row_Productos = mysql_fetch_array($Productos)){
$FamiliasLista[ $row_Productos['producto'] ] = $row_Productos['es_Familia'];
}
... y ahí sí pases el array_unique.
  #3 (permalink)  
Antiguo 01/09/2010, 08:06
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Conexión a BD con valores de un Array

Además...

Para que hacerlo con php si MySql te permite hacerlo desde la consulta? Es más rápido un consulta directa a Db que realizar un script para tal fin. Un group by o distinct estaría bien.

Saludos.
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 01/09/2010, 09:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Conexión a BD con valores de un Array

Madre mía, que sencillo!

Bueno, cosas de ser principiante, desconocía DISTINCT y el GROUP BY!!!


Tan sólo una última pregunta y antes de perder más tiempo, ¿cómo hago para repetir los resultados de un grupo?

Si lo hago de este modo:

Código PHP:
$query_Productos "SELECT DISTINCT * FROM productos WHERE ApareceEnLaWeb = 'Si' GROUP BY es_Familia ORDER BY es_Familia ASC";
$Productos mysql_query($query_Productos$bdmontsoliu) or die(mysql_error());
$row_Productos mysql_fetch_assoc($Productos);
$totalRows_Productos mysql_num_rows($Productos);
do {
echo 
$row_Productos['es_Familia'];
echo 
$row_Productos['es_NombreProducto'];
 } while (
$row_Productos mysql_fetch_assoc($Productos)); 
Tan sólo me aparece el primero, es decir:
  • Grupo 1
  • Producto 1-1
  • Grupo 2
  • Producto 2-1
  • Grupo 3
  • Producto 3-1
  • ...


Muchas Gracias a ambos!!!
  #5 (permalink)  
Antiguo 01/09/2010, 09:41
Avatar de josej30  
Fecha de Ingreso: noviembre-2008
Ubicación: Caracas, Venezuela
Mensajes: 61
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Conexión a BD con valores de un Array

Es cierto lo que dicen... Mientras puedas hacerlo directamente en la consulta es mejor a hacerlo en un script.. Así te ahorras tiempo y trabajo, además que es más eficiente (por lo general)
  #6 (permalink)  
Antiguo 01/09/2010, 11:06
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Conexión a BD con valores de un Array

Si parece sencillo, pero ahora no consigo listar los grupos con sus respectivos productos! Alguien tiene idea?
  #7 (permalink)  
Antiguo 01/09/2010, 12:24
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Conexión a BD con valores de un Array

Eso que publicaste está un poco sucio. No uses esto sin while:
$row_Productos = mysql_fetch_assoc($Productos);

Eso es lo que se ejecuta la primera vez que hacés el do. Y tiene un solo resultado.

Es más, no uses do:
Cita:
$query_Productos = "SELECT DISTINCT * FROM productos WHERE ApareceEnLaWeb = 'Si' GROUP BY es_Familia ORDER BY es_Familia ASC";
$Productos = mysql_query($query_Productos, $bdmontsoliu) or die(mysql_error());

$totalRows_Productos = mysql_num_rows($Productos);

while ($row_Productos = mysql_fetch_assoc($Productos))
{
echo $row_Productos['es_Familia'];
echo $row_Productos['es_NombreProducto'];
}
  #8 (permalink)  
Antiguo 03/09/2010, 02:39
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Conexión a BD con valores de un Array

Gracias Mayid, lo he puesto cómo me has dicho y sigue apareciéndome un sólo resultado...voy a investigar un poco más...
  #9 (permalink)  
Antiguo 03/09/2010, 03:56
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Conexión a BD con valores de un Array

Lo doy por imposible, por favor, alguien tiene idea d cómo solucionar:

Quiero que aparezcan listados la categoría de producto y el producto:

Con éste código:
Código PHP:
        $query_Productos "SELECT DISTINCT * FROM productos WHERE ApareceEnLaWeb = 'Si' ORDER BY es_Familia ASC ";
        
$Productos mysql_query($query_Productos$bdmontsoliu) or die(mysql_error());
        
$totalRows_Productos mysql_num_rows($Productos);
        
        while (
$row_Productos mysql_fetch_array($Productos)){
                
$FamiliasLista[] = $row_Productos['es_Familia'];
                
$ProductosLista[] = $row_Productos['es_NombreProducto'];
        }
        
$ProductoresLista array_unique($FamiliasLista);
        foreach (
$ProductoresLista as $Resultado => $valor){
            echo 
'<li>'.$valor.'</li>';
            echo 
'<ul><li>'.$ProductosLista[$Resultado].'</li></ul>';
        } 
Tan sólo consigo que me aparezca el primer producto, cuando en realidad hay más. Es decir, me aparece:

Gatos
Gato persa.
Perros
Perro Pastor
etc.

Cuando quiero que aparezcan todos por categoría:

Gatos
Gato persa.
Gato siamés.
Gato Inglés.
Gato Europeo.
Perros
Perro Pastor
Perro de pekín.
etc.
  #10 (permalink)  
Antiguo 03/09/2010, 04:07
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Listar por Categoría y Producto

Lo doy por imposible, por favor, alguien tiene idea de cómo solucionar:

Quiero que aparezcan listados la categoría de producto y el producto:

Con éste código:


Código PHP:
        $query_Productos "SELECT DISTINCT * FROM productos WHERE ApareceEnLaWeb = 'Si' ORDER BY es_Familia ASC ";
        
$Productos mysql_query($query_Productos$bdmontsoliu) or die(mysql_error());
        
$totalRows_Productos mysql_num_rows($Productos);
        
        while (
$row_Productos mysql_fetch_array($Productos)){
                
$FamiliasLista[] = $row_Productos['es_Familia'];
                
$ProductosLista[] = $row_Productos['es_NombreProducto'];
        }
        
$ProductoresLista array_unique($FamiliasLista);
        foreach (
$ProductoresLista as $Resultado => $valor){
            echo 
'<li>'.$valor.'</li>';
            echo 
'<ul><li>'.$ProductosLista[$Resultado].'</li></ul>';
        } 
Tan sólo consigo que me aparezca el primer producto, cuando en realidad hay más. Es decir, me aparece:

Gatos
Gato persa.
Perros
Perro Pastor
etc.

Cuando quiero que aparezcan todos por categoría:

Gatos
Gato persa.
Gato siamés.
Gato Inglés.
Gato Europeo.
Perros
Perro Pastor
Perro de pekín.
etc.

NOTA: Habro un hilo nuevo, ya que el anterior el título (http://www.forosdelweb.com/f18/conex...-array-838340/) no describe exactamente lo que quiero y no lo puedo editar. Si hay algún problema por repetición de post, eliminen el post anterior. Gracias por su comprensión.
  #11 (permalink)  
Antiguo 03/09/2010, 04:14
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Conexión a BD con valores de un Array

Justo cuando acaba el while: while ($row_Productos = mysql_fetch_array($Productos)){ haz un print_r($ProductosLista); y dime que te sale.
  #12 (permalink)  
Antiguo 03/09/2010, 04:17
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Listar por Categoría y Producto

Te vuelvo a escribir aqui lo que dije en el otro hilo: ;)
Justo cuando acaba el while: while ($row_Productos = mysql_fetch_array($Productos)){ haz un print_r($ProductosLista); y dime que te sale.
  #13 (permalink)  
Antiguo 03/09/2010, 04:17
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Conexión a BD con valores de un Array

Cita:
Iniciado por Vallu Ver Mensaje
Justo cuando acaba el while: while ($row_Productos = mysql_fetch_array($Productos)){ haz un print_r($ProductosLista); y dime que te sale.
Me aparece la array con los productos, pero tan sólo el primero no todos los productos...es decir:

Array ( [0] =>Perro1

[1] => Gato1 [2] => Caballo3 ..etc
  #14 (permalink)  
Antiguo 03/09/2010, 04:19
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Listar por Categoría y Producto

Cita:
Iniciado por Vallu Ver Mensaje
Te vuelvo a escribir aqui lo que dije en el otro hilo: ;)
Justo cuando acaba el while: while ($row_Productos = mysql_fetch_array($Productos)){ haz un print_r($ProductosLista); y dime que te sale.
Me aparece la array con los productos, pero tan sólo el primero no todos los productos...es decir:

Array ( [0] =>Perro1

[1] => Gato1 [2] => Caballo3 ..etc

Escribamos en este post mejor!
  #15 (permalink)  
Antiguo 03/09/2010, 04:19
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Conexión a BD con valores de un Array

y si pones el print_r(ProductoresLista )?
  #16 (permalink)  
Antiguo 03/09/2010, 04:25
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Listar por Categoría y Producto

Perdona, me rectifico, como estaba haciendo pruebas había cambiado el código.

Con el código que hay en este POST, o sea, con las instrucciones que me has dado, haciendo print_r tanto de productores y productos, aparece correctamente como quiero.

Es decir, me aparece la array desglosada en todos los productos:

print_r($ProductosLista) =
Array ( [0] => Queso de cabra tierno [1] => Queso de cabra semi-curado [2] => Queso de cabra semi romero [3] => Fabada Asturiana 2 raciones [4] => Fabada Asturiana 4 raciones etc...

print_r($ProductoresLista) =
Array ( [0] => Quesos [1] => Fabadas, etc...

Pk denominios no me lo hace con el while???
  #17 (permalink)  
Antiguo 03/09/2010, 04:58
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Listar por Categoría y Producto

Eso lo que significa que lo que estas haciendo mal es el foreach. xD
Es un alivio saber que solo es eso y no la conexion ni nada por el estilo.
Ves probando, ahora mismo no me sale, igualmente soy malillo en los bucles foreach.
  #18 (permalink)  
Antiguo 03/09/2010, 06:28
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Sonrisa Respuesta: Listar por Categoría y Producto

Bueno chic@s, lo he solucionado haciendo un while dentro de un while usando DISTINTC, nada de array_unique ni foerach:

Código PHP:
        $query_Productos "SELECT DISTINCT es_Familia FROM productos WHERE ApareceEnLaWeb = 'Si' ORDER BY es_Familia ASC";
        
$Productos mysql_query($query_Productos$bdmontsoliu) or die(mysql_error());
        while (
$row_Productos mysql_fetch_array($Productos)){
             echo 
'<li>'.$row_Productos['es_Familia'].'</li>';
             
$query_ProductosLista "SELECT * FROM productos WHERE ApareceEnLaWeb = 'Si' AND es_Familia LIKE '".$row_Productos['es_Familia']."' ORDER BY es_Familia ASC";
             
$ProductosLista mysql_query($query_ProductosLista$bdmontsoliu) or die(mysql_error());
             while (
$row_ProductosLista mysql_fetch_array($ProductosLista)){
                 echo 
'<ul><li>'.$row_ProductosLista['es_NombreProducto'].'</li></ul>';
             }
        } 
Gracias a todos!!!

Etiquetas: bd
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:37.