Foros del Web » Programando para Internet » PHP »

duda foreach en una consulta

Estas en el tema de duda foreach en una consulta en el foro de PHP en Foros del Web. a ver si me doy a entender que es lo que quiero tengo una tabla con valores timestamp recibo el valor lo divido y le ...
  #1 (permalink)  
Antiguo 04/06/2011, 12:21
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
duda foreach en una consulta

a ver si me doy a entender que es lo que quiero

tengo una tabla con valores timestamp recibo el valor lo divido y le cambio la hora

Código PHP:
<?php
include("conexion.php");

$query "select * from tabla";
$result mysql_query($query) or die (mysql_error());



 while (
$reg mysql_fetch_array($result)){
$Entrada $reg['Entrada'];
$Salida $reg['Salida'];

$fechaE strtotime($Entrada);
$fen1 date("Y",$fechaE);
$fen2 date("m",$fechaE);
$fen3 date("d",$fechaE);

$fechaEF $fen1."-".$fen2."-".$fen3;
$hInicio '08:00:00';
$inicio. = $fechaEF." ".$hInicio;

//fecha salida
$fechaS strtotime($Salida); 
$fes1 date("Y",$fechaS);
$fes2 date("m",$fechaS);
$fes3 date("d",$fechaS);

$fechaSF $fes1."-".$fes2."-".$fes3;
$hTermina '18:00:00';
$termina. = $fechaSF." ".$hTermina;

}
/* 
si imprimo fuera del while si me da los valores leei por aqui en un post  que usara  esto .= y funciono 
*/
echo $inicio;
echo 
"<br/>";
echo 
$termina;
echo 
"<br/>";

/*y pues esos valores de $inicio,$termina los necesitaria usar en otra consulta pero pues ya  no me aparecen */
$query2 "
SELECT W.*,DifEntrada+DifSalida as Total FROM
(
SELECT
Entrada,
TIMESTAMPDIFF(MINUTE,'$inicio',.Entrada) as DifEntrada,
Salida,
TIMESTAMPDIFF(MINUTE,Salida,'$termina')  as DifSalida,
Semana
FROM  tabla
) W
"
;


?>


no se si pudiera usar un foreach y como porque probé pero no funciono o que se les ocurre ya me estoy secando

Última edición por Markgus; 04/06/2011 a las 12:30
  #2 (permalink)  
Antiguo 04/06/2011, 13:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: duda foreach en una consulta

¿Podrías explicar lo que quieres hacer?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 06/06/2011, 10:48
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

hola abimaelrc pues en la consulta 1 saco los valores de la tabla,esa tabla tiene 2 campos (Entrada,Salida) de fecha que son timestamp, después divido esos campos para cambiarles la hora ejemplo si Entrada es 2011-06-06 08:15:23 la cambio por 2011-06-06 08:00:00

Código PHP:
$query "select * from tabla";
$result mysql_query($query) or die (mysql_error());

while (
$reg mysql_fetch_array($result)){
$Entrada $reg['Entrada'];
$Salida $reg['Salida'];

$fechaE strtotime($Entrada);
$fen1 date("Y",$fechaE);
$fen2 date("m",$fechaE);
$fen3 date("d",$fechaE);

$fechaEF $fen1."-".$fen2."-".$fen3;
$hInicio '08:00:00';
$inicio. = $fechaEF." ".$hInicio;

esto es porque después necesito esos valores para sacar una diferencia de minutos con el timestampdiff

Código MySQL:
Ver original
  1. SELECT TIMESTAMPDIFF(MINUTE,'2011-06-06 08:00:00','2011-06-06 08:15:23') as DifEntrada

por eso cambio lo que tengo en $reg['Entrada']; que en este ejemplo seria
2011-06-06 08:15:23 lo cambio a $inicio para que sea 2011-06-06 08:00:00
porque si lo dejara igual el resultado seria 0 y se compararía la misma fecha pero pues así la diferencia seria 15

y pues lo que necesito es hacer eso por cada registro, que se compare lo que tengo ahora en $inicio y $termina hice unas pruebas para ver si me imprima los valores convertidos fuera del while y si aparecen, me imprime la cantidad de registros cambiándoles la hora, comentaba esto
Cita:
/*
si imprimo fuera del while si me da los valores leei por aqui en un post que usara esto .= y funciono
*/
echo $inicio;
echo "<br/>";
echo $termina;
echo "<br/>";
pero al yo intentar usarlos en la consulta 2 pues no se como que no los agarra, pienso que es con un foreach o con arreglos, ahorita seguiré probando pero pues si me pueden ayudar o aclarar las cosas estaría muy agradecido


Código PHP:
$query2 "
SELECT W.*,DifEntrada+DifSalida as Total FROM
(
SELECT
Entrada,
TIMESTAMPDIFF(MINUTE,'$inicio',.Entrada) as DifEntrada,
Salida,
TIMESTAMPDIFF(MINUTE,Salida,'$termina')  as DifSalida,
Semana
FROM  tabla
) W
"

en resumen creo que seria de la consulta de arriba por cada registro hacer la comparación de la fecha con lo nuevos valores de $inicio y $termina
no se si me explico o confundo mas :S
  #4 (permalink)  
Antiguo 07/06/2011, 16:27
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

sigo intentando pero nomas no doy ahora tengo algo así, por el momento solo estoy intentando con un arreglo '$aEntrada' pero ni asi me sale

Código PHP:
<?php
include("conexion.php");

?>
<html>
<head>
</head>
<body>

<?

$query 
"select * from tabla";
$result mysql_query($query) or die (mysql_error());


//declaro los arreglos $aEntrada y $aSalida
$aEntrada=array();
$aSalida= array();
while(
$reg=mysql_fetch_array($result)){
$Entrada $reg['Entrada'];
$Salida $reg['Salida'];  

//les cambio la hora
$fechaE strtotime($Entrada);
$fen1 date("Y",$fechaE);
$fen2 date("m",$fechaE);
$fen3 date("d",$fechaE);

$fechaEF $fen1."-".$fen2."-".$fen3;
$hInicio '08:00:00';
$inicio $fechaEF." ".$hInicio;

//fecha salida
$fechaS strtotime($Salida); 
$fes1 date("Y",$fechaS);
$fes2 date("m",$fechaS);
$fes3 date("d",$fechaS);

$fechaSF $fes1."-".$fes2."-".$fes3;
$hTermina '18:00:00';
$termina $fechaSF." ".$hTermina;



//echo $inicio;

$aEntrada[] = $inicio;
$aSalida[] = $termina;

}



foreach (
$aEntrada as $value) {
$query3 =
SELECT K.*,DifEntrada+DifSalida as Total FROM
(
SELECT
Entrada,
TIMESTAMPDIFF(MINUTE,'$value',Entrada) as DifEntrada,
Salida,
TIMESTAMPDIFF(MINUTE,Salida,'$value')  as DifSalida
FROM tabla
) K
"
;


$result3 mysql_query($query3) or die (mysql_error());


$num_results mysql_num_rows($result3);
echo 
"Registros Encontrados: ".$num_results;


echo 
"\t<table class=\"registros\">\n";
echo 
"<tr class=\"titulos\">
<td><font color='#FFFFFF' face='Arial,  Helvetica, sans-serif'>Entrada:</font</td>
<td><font color='#FFFFFF' face='Arial, Helvetica,  sans-serif'>DifEntrada:</font></td>
<td><font color='#FFFFFF' face='Arial,  Helvetica, sans-serif'>Salida:</font></td>
<td><font color='#FFFFFF' face='Arial,  Helvetica, sans-serif'>DifSalida:</font></td>
<td><font color='#FFFFFF' face='Arial,  Helvetica, sans-serif'>Total Minutos:</font></td>
</tr>\n"
;
$r=0;
while(
$row mysql_fetch_assoc($result3)){
echo 
"\t\t<tr class=\"row$r\">
<td>"
.htmlentities($row['Entrada'])."</td>
 <td>"
.htmlentities($row['DifEntrada'])."</td>
<td>"
.htmlentities($row['Salida'])."</td>
 <td>"
.htmlentities($row['DifSalida'])."</td>
 <td>"
.htmlentities($row['Total'])."</td>
                </tr>\n"
;
          if(
$r%2==0)++$r;else--$r;
        }
            echo 
"\t</table>\n";

}

?>
</body>
</html>
lo que hace aqui es que me imprime la tabla X cantidad de veces por ejemplo si aqui
Código PHP:
<?echo "Registros Encontrados: ".$num_results;?>
es 4 me imprime la tabla 4 veces ysi es porque esta dentro del ciclo pero me tambien me di cuenta que de esas 4 veces por cada registro si sale una fecha bien

es decir en la tabla 1 la comparación en la fila 1 es correcta y en la 2 con la 2 y asi

creo que mi problema seria en la forma de acomodar la matriz, aunque si imprimo fuera del ciclo si se imprime solo una vez pero me trae solo el ultimo registros del arreglo espero que me puedan ayudar y no los este confundiendo, como leeran no soy bueno con los arreglos si tienen algún ejemplo que me pueda orientar se los agradeceria
  #5 (permalink)  
Antiguo 07/06/2011, 16:30
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: duda foreach en una consulta

a ver vamos a dividir por problemas más pequeños pq es mucho codigo y la gente se aburre y no lo lee, que es lo que quieres hacer primeramente, o mejor aun dinos en que tienes duda y te damos una solucion y la aplicas a tu caso,
  #6 (permalink)  
Antiguo 07/06/2011, 16:41
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

ok gracias a ver si lo puedo resumir,
Cita:
1ero seria hacer una consulta, de los resultados obtenidos pasarlos a un arreglo
, eso creo que ya lo tengo

Cita:
y esos valores del arreglo usarlos para hacer otra consulta
Código PHP:
foreach ($aEntrada as $value) { 
$query3 ="  
SELECT 
Entrada, 
TIMESTAMPDIFF(MINUTE,'$value',Entrada) as DifEntrada, FROM tabla 
"


como aquí necesito que ese valor del $value cambie por cada registro
  #7 (permalink)  
Antiguo 07/06/2011, 16:46
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: duda foreach en una consulta

foreach ($aEntrada as $value) {
$query3 ="
SELECT
Entrada,
TIMESTAMPDIFF(MINUTE,'$value',Entrada) as DifEntrada, FROM tabla
";
}
pero no estás ejecutnado la consulta dentro del foreach
  #8 (permalink)  
Antiguo 07/06/2011, 16:52
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

Cita:
Iniciado por iviamontes Ver Mensaje
foreach ($aEntrada as $value) {
$query3 ="
SELECT
Entrada,
TIMESTAMPDIFF(MINUTE,'$value',Entrada) as DifEntrada, FROM tabla
";
}
pero no estás ejecutnado la consulta dentro del foreach
dices porque no copie esto?
$result3 = mysql_query($query3) or die (mysql_error());

o es otra cosa?
  #9 (permalink)  
Antiguo 07/06/2011, 20:33
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: duda foreach en una consulta

anja por eso, es que no sabia si lo hacias o no
  #10 (permalink)  
Antiguo 08/06/2011, 09:26
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

em si lo hago, entonces no se te ocurre alguna manera para los resultados de una consulta como arreglo, usarlos en en otra consulta por cada registro?
  #11 (permalink)  
Antiguo 08/06/2011, 09:30
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: duda foreach en una consulta

esto
conexion1
$result = consulta1
while ($row = mysql_fetch_array($result))
{
conexion2
$result2 = consulta2
while ($row2 = mysql_fetch_array($result2))
{
lo que quieras con row y row2
}
}
  #12 (permalink)  
Antiguo 08/06/2011, 10:36
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

gracias creo que ya andamos cercas pero me funciona igual como lo tenia antes,pero digo que andamos cercas porque
por ejemplo si el resultado de las consultas es 4
la tabla se me imprime 4 veces ,pero en cada una de ellas un registro esta bien, en la tabla 1, la fila 1 esta bien, en la tabla 2 la fila 2 esta bien, en la tabla 3 la fila 3 esta bien y en la 4 la fila 4 esta bien el problema es que solo quiero que me imprima una tabla con cada fila correcta, probé algunas combinaciones pero aun no
  #13 (permalink)  
Antiguo 08/06/2011, 10:38
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: duda foreach en una consulta

ya es un problema de decirle donde quieres los datos, ya no es de tu consulta, si no de la forma en que la quieres mostrar...
  #14 (permalink)  
Antiguo 08/06/2011, 11:22
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

si pero no se como , porque si saco el 2ndo while del ciclo del 1ero, si se imprimirá una vez pero no me traerá lo que tengo en $row solo traerá el ultimo registro
y si lo dejo adentro, si usara todos los registros de $row pero se imprimirá varias veces como lo tengo

de las primeras formas que se me ocurrió fue intentar guardar lo de $row así con .=
Código PHP:
$campo .= $row['Entrada']; 
si miraba todos los registros fuera del while de $row pero de la forma en que me los regresaba no me servian para la consulta por que me enviaba toda la cadena seguida y no me funcionaba la consulta

luego intente con el foreach y como tu me dijiste con el while ya sale la consulta :) pero pues esta eso de que se imprime varias veces que sera?
  #15 (permalink)  
Antiguo 11/06/2011, 10:17
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: duda foreach en una consulta

sigo sin poder solucionarlo recorte el codigo para que sea mas entendible porque creo que los confundi y lo unico que quiero es usar los valores de un arreglo que ya tengo en otra consulta

ya tengo el arreglo $aEntrada que tiene los valores ('2011-05-25 08:00:00','2011-05-26 08:00:00'........)

y quiero usar esos valores para hacer una consulta asi

Código PHP:
foreach($aEntrada as $value){
$query "select Entrada,timestampdiff(minute,'$value',Entrada)as Diferencia from tabla";
$res mysql_query($query) or die (mysql_error());


echo 
"\t<table >\n";
            echo 
"<tr class=\"titulos\">
                      <td><font color='#FFFFFF' face='Arial, Helvetica, sans-serif'>Entrada:</font></td>
                           <td><font color='#FFFFFF' face='Arial, Helvetica, sans-serif'>Diferencia:</font></td>
                            </tr>"
;
 
$r=0;
while(
$row2 mysql_fetch_array($res)){
 echo 
"\t\t<tr class=\"row2$r\">
                
                <td>"
.htmlentities($row2['Entrada'])."</td>
                           <td>"
.htmlentities($row2['Diferencia'])."</td>
                           </tr>\n"
;
          if(
$r%2==0)++$r;else--$r;
        }
            echo 
"\t</table>\n";



 } 
pero no me sale, se imprime varias veces la tabla, en resumen como puedo recorrer los valores de un arreglo para hacer otra consulta, ya intente de muchas maneras y no logro dar con la solución, agradecería que me pudieran aclarar como hacerlo

Etiquetas: foreach
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:11.