Foros del Web » Programando para Internet » PHP »

foreach y consulta mysql

Estas en el tema de foreach y consulta mysql en el foro de PHP en Foros del Web. Estoy un poco perdido con el uso del foreach con una consulta mysql. En una tabla, tengo marcas, y en otra productos. Yo quisiera imprimir ...
  #1 (permalink)  
Antiguo 13/09/2010, 08:28
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
foreach y consulta mysql

Estoy un poco perdido con el uso del foreach con una consulta mysql.
En una tabla, tengo marcas, y en otra productos.
Yo quisiera imprimir en pantalla todos los productos de cada marca, debajo de las mismas. Es decir:

Marca A
prod 1
prod 2
prod 3

Marca B
prod 1
prod 2

y así. No estoy muy seguro de cómo hacerlo, pero lo intenté de varias maneras... esta última me parece la más aproximada, pero no me da ningún resultado.


Código:
<?php
include ("conexion.php"); 
$conexion = mysql_connect ($host, $user, $pass);
mysql_select_db ($base, $conexion);
$sql="SELECT * from matermec_marcas ORDER BY nombre ASC";
$result = mysql_query($sql, $conexion);
while ($row=mysql_fetch_array($result))
{
$id=$row['id'];
$marca= $row['nombre'];
$marcas= array ($marca); 
}    

foreach($marcas as $marca) 
    {
    
    echo "$marca<br/>";
    $sql2= "select * from matermec_productos where id_marca='$ids'"; 
    $result2 = mysql_query($sql2, $conexion);
        while ($row2=mysql_fetch_array($result2))
        {
         echo $row2['nombre']; 
        } 
?>
La última vez que hice algo parecido fue hace mucho, pero era para listar todos los productos de la A a la Z, y esto sí me funcionó

Código:
foreach( range( 'a', 'z' ) as $letra ) 
	{
	?>
	<div class="caja_por_letra">
	<? 
	echo "<p style=\"font-size:25px;font-weight:bold;\"><a name=\"$letra\">$letra</a></p>";
	$sql11= "select distinct nombre, sistema, id from productos where nombre like '$letra%'"; 
	$result11 = mysql_query($sql11, $conexion);
	if ($row = mysql_fetch_array($result11))
		{ 
		mysql_field_seek($result11,0); 
		do 
			{ 
?><a class="link_sistemas" href="productos.php?sistema=<? echo $row['sistema']; ?>&id=<? echo $row['id']; ?>"><? echo $row['nombre']; ?></a><br/><br/>
<?			} 
		while ($row = mysql_fetch_array($result11)); 
		}
	?>
	</div>
	<? 

	}  


?>


Pero no sé cómo meter la lista de marcas obtenidas de la primera consulta en el foreach.

Agradezco cualquier ayuda!

saludos.
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #2 (permalink)  
Antiguo 13/09/2010, 08:36
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: foreach y consulta mysql

primero debes tener un id_marca en la tabla productos...porq como sabras a que marca pertenece y despues hace esto...


Código SQL:
Ver original
  1. SELECT * FROM productos p INNER JOIN marca m
  2. ON p.id_marca = m.id_marca
  3. WHERE p.id_marca = $id_marca


adapta tu codigo a esto...no tienes para q hacer mas de una consulta...
  #3 (permalink)  
Antiguo 13/09/2010, 08:48
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: foreach y consulta mysql

Gracias por tu aporte SDP.

Ahora hago una sola consulta, pero sigue sin funcionar -correctamente- ya que me lista la marca por cada producto de la misma (me pone: marca A, producto 1, Marca A, producto 2, Marca B, producto1, Marca B, producto 2, etc.

Lo modifiqué de la siguiente manera:
Código:
<?php
include ("conexion.php"); 
$conexion = mysql_connect ($host, $user, $pass);
mysql_select_db ($base, $conexion);
$sql="SELECT MAR.id as idm, MAR.nombre as marca, PROD.nombre as producto
from matermec_marcas MAR
left join matermec_productos PROD
on PROD.id_marca=MAR.id
ORDER BY MAR.nombre, PROD.nombre ASC";
$result = mysql_query($sql, $conexion);
while ($row=mysql_fetch_array($result))
{
$marca= $row['marca'];
$marcas= array ($marca); 
	echo "$marca<br/>";
foreach($marcas as $marca) 
	{
	
		 echo $row['producto']; 
	 }
}	
?>
¿Alguna idea de cómo puedo seguir?
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #4 (permalink)  
Antiguo 13/09/2010, 08:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: foreach y consulta mysql

hasle un print_r a $marcas y dinos que te muestra de echo esto
Cita:
while ($row=mysql_fetch_array($result))
{
$marca= $row['marca'];
$marcas= array ($marca);
echo "$marca<br/>";
foreach($marcas as $marca)
{

echo $row['producto'];
}
}
estas haciendo el foreach dentro del bucle while para que?? otra cosa no te serviria mas asi
Código PHP:
Ver original
  1. $marca=array();
  2. while ($row=mysql_fetch_array($result))
  3. {
  4. $marcas[]=$row['marca'];
  5. foreach($marcas as $marca)
  6.     {
  7.              echo $marca."<br/>";
  8.          echo $row['producto'];
  9.      }
  10. }
espero te sirva y te alla entendido bien
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 13/09/2010, 08:57
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: foreach y consulta mysql

Bueno según veo yo, si quieres sacar los datos de esta forma:

Marca A
prod 1
prod 2
prod 3

Marca B
prod 1
prod 2
prod 3

no te queda otra que anidar 2 bucles, mas o menos asi:

Código PHP:
$resultm mysql_query("select * from marcas order by id asc"$conexion);
while (
$rowm=mysql_fetch_array($resultm)) {
    echo 
$rowm["nombre"]."<br>";
    
$resultp mysql_query("select * from productos where id_marca=".$rowm["id"]." order by id asc"$conexion);
    while (
$rowp=mysql_fetch_array($resultp)) {
        echo 
$rowp["nombre"]."<br>";
    }

  #6 (permalink)  
Antiguo 13/09/2010, 08:58
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: foreach y consulta mysql

ahorita estoy saliendo, en cuanto vuelva al trabajo lo pruebo te cuento, muchas gracias Carlos.
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #7 (permalink)  
Antiguo 13/09/2010, 09:01
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: foreach y consulta mysql

Vun: excelente, me ha sido de gran ayuda, ya que funcionó.
Ahora tendré que coordinarlo con el buscador.
Gracias a todos por su tiempo y su aporte.

saludos,
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #8 (permalink)  
Antiguo 13/09/2010, 11:26
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: foreach y consulta mysql

Tunee la consulta para que no me muestre marcas de las que no haya productos:

Código:
<?php
include ("conexion.php"); 
$conexion = mysql_connect ($host, $user, $pass);
mysql_select_db ($base, $conexion);

$resultm = mysql_query("select distinct PRO.id_marca as idm, MAR.nombre as marca from matermec_productos PRO
inner join matermec_marcas MAR
on PRO.id_marca=MAR.id
 order by marca asc", $conexion);
while ($rowm=mysql_fetch_array($resultm)) {
    echo $rowm["marca"]."<br>";
    $resultp = mysql_query("select * from matermec_productos where id_marca=".$rowm["idm"]." order by id asc", $conexion);
    while ($rowp=mysql_fetch_array($resultp)) {
        echo $rowp["nombre"]."<br>";
    }
}  


?>
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar

Etiquetas: foreach, mysql
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 00:23.