Foros del Web » Programando para Internet » PHP »

Ayuda con varios while

Estas en el tema de Ayuda con varios while en el foro de PHP en Foros del Web. Hola veran, estoy haciendo un sistema de costos unitarios y necesito imprimir en una hoja denominada proyectos, todas las hojas de costos untarias que posee ...
  #1 (permalink)  
Antiguo 05/12/2008, 14:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 5 meses
Puntos: 1
Ayuda con varios while

Hola veran, estoy haciendo un sistema de costos unitarios y necesito imprimir en una hoja denominada proyectos, todas las hojas de costos untarias que posee el proyecto. Y mi codigo fuente queda mas menos asi.
Código PHP:
<? 
$db
="costos";
$tabla="actividades";
$tabla2="actividades_proyecto";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select actividades.id_actividad,actividades.descripcion,actividades.unidad,actividades_proyecto.id_actividad,actividades_proyecto.cantidad from actividades left join actividades_proyecto on actividades.id_actividad=actividades_proyecto.id_actividad ";
$result=mysql_query($sql,$conexion);
echo 
"<left><table border=1>";
echo 
"<tr><th><font color=black>Codigo</th>";
echo 
"<th><font color=black>Descripcion</th>";
echo 
"<th width='20'><font color=black>Unidad</th>";
echo 
"<th><font color=black>Cantidad</th>";
echo 
"<th><font color=black>Costo</th>";
echo 
"<th><font color=black>Subtotal</th>";
while(
$row mysql_fetch_array($result))
{
echo 
'<tr><td><font color=black>'.$row["id_actividad"].'</td>';
echo 
'<td><font color=black>'.$row["descripcion"].'</td>';
echo 
'<td width="20"><font color=black>'.$row["unidad"].'</td>';
echo 
'<td width="20"><font color=black>'.$row["cantidad"].'</td>';
$id=$row["id_actividad"];
$cant=$row["cantidad"];
 
$db="costos";
$tabla="materiales";
$tabla2="materiales_actividad";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="SELECT materiales.id_material, materiales.descripcion, materiales.unidad,ROUND( SUM( materiales.precio * materiales_actividad.cantidad ),2) AS total
FROM $tabla
LEFT JOIN $tabla2 ON materiales.id_material = materiales_actividad.id_material
AND materiales_actividad.id_actividad ='"
.$id."'
GROUP BY materiales_actividad.id_actividad"
;
$result=mysql_query($sql,$conexion);
while(
$row mysql_fetch_array($result))
{
$total1=$row["total"];}}
Y me funciona a la perfeccion, el problema es que solamente me hace una sola vez la consulta y he detectado que es por que cierro el while del primero hasta abajo, ya que si lo hago despues que hago la seleccion a la tabla, es decir despues del primer while si me enseña los demas registros, pero no me hace ahora la operacion matematica, que he creado.

Asi que es ahi adonde solicito de su ayuda.

Desde ya gracias.
  #2 (permalink)  
Antiguo 05/12/2008, 14:46
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 19 años, 11 meses
Puntos: 15
Respuesta: Ayuda con varios while

Mira head a primera vista de tu codigo unas observaciones, para que usas la variables $tabla y $tabla2, en tu codigo php lo usas como para querer usar el select con diferentes tablas, pero dentro de ese mismo select llamas a los campos con el nombre de la tabla en duro(Creo que no me dejo entender bien aqui).

Segundo para que haces una conexion dentro del while si ya tienes una arriba, al hacer el while estarias creando un monton de conexiones(me imagino que ya el DBA de tu sistema te debe estar queriendo un monton, ). Y pues no se si toy mal, pero creo que se podria hacer todo con un solo select, pero no estoy seguro.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)

Última edición por stone_neo; 05/12/2008 a las 14:52
  #3 (permalink)  
Antiguo 05/12/2008, 14:49
 
Fecha de Ingreso: enero-2008
Mensajes: 163
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Ayuda con varios while

bueno pues primero que nada no es necesario que agas una segunda conexion, y yo recomendario manejar variables diferentes en el fetch
Código PHP:
<? 
$db
="costos";
$tabla="actividades";
$tabla2="actividades_proyecto";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select actividades.id_actividad,actividades.descripcion,actividades.unidad,actividades_proyecto.id_actividad,actividades_proyecto.cantidad from actividades left join actividades_proyecto on actividades.id_actividad=actividades_proyecto.id_actividad ";
$result=mysql_query($sql,$conexion);
echo 
"<left><table border=1>";
echo 
"<tr><th><font color=black>Codigo</th>";
echo 
"<th><font color=black>Descripcion</th>";
echo 
"<th width='20'><font color=black>Unidad</th>";
echo 
"<th><font color=black>Cantidad</th>";
echo 
"<th><font color=black>Costo</th>";
echo 
"<th><font color=black>Subtotal</th>";
while(
$row mysql_fetch_array($result))
{
echo 
'<tr><td><font color=black>'.$row["id_actividad"].'</td>';
echo 
'<td><font color=black>'.$row["descripcion"].'</td>';
echo 
'<td width="20"><font color=black>'.$row["unidad"].'</td>';
echo 
'<td width="20"><font color=black>'.$row["cantidad"].'</td>';
$id=$row["id_actividad"];
$cant=$row["cantidad"];
$tabla="materiales";
$tabla2="materiales_actividad";
$sql="SELECT materiales.id_material, materiales.descripcion, materiales.unidad,ROUND( SUM( materiales.precio * materiales_actividad.cantidad ),2) AS total
FROM $tabla
LEFT JOIN $tabla2 ON materiales.id_material = materiales_actividad.id_material
AND materiales_actividad.id_actividad ='"
.$id."'
GROUP BY materiales_actividad.id_actividad"
;
$result1=mysql_query($sql,$conexion);
while(
$row1 mysql_fetch_array($result1))
{
$total1=$row1["total"];}}
ya que utilisas while fetch(variable) y dentro del mismo while estas poniendo while(fetch(variable)) utilisas la misma variable creo yo que eso puede meter ruido jejeje creo yo es solo una sugerencia pero lo de la conexion no es necesario 2 veces jeje
  #4 (permalink)  
Antiguo 05/12/2008, 15:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Ayuda con varios while

Pero si creen que no es necesaria la conecion a la base dos veces, como puedo hacer entonces esa super consulta que aparte que me muestre los registros de la tabla actividades, me muestre esa operacion matematica que ven ahi??? o si conocen una manera mas facil de hacer, estaria feliz de oirla.

Ya que como dije antes son varias hojas y por cada hoja tengo que mostrar su total y pues la verdad no le hayo otra forma de hacerlo.
  #5 (permalink)  
Antiguo 05/12/2008, 16:01
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 19 años, 11 meses
Puntos: 15
Respuesta: Ayuda con varios while

No es que creamos, no es necesaria una segunda conexión, como te dije me parece que se puede hacer eso con una sola consulta, pero necesitaria mas datos de tus tablas.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #6 (permalink)  
Antiguo 05/12/2008, 16:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Ayuda con varios while

bueno son 4 tablas las que necesito usar y son:

materiales: id_material,descripcion, unidad
materiales_actividad: id_material, id_actividad, cantidad
actividades_proyecto: id_proyecto, id_actividad, cantidad
actividades: id_actividad,descripcion,unidad

Ahora lo que no puedo hacer es ese super query, asi que si me hacen el favor de ayudarme, les estaria agradecidos.
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:57.