entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

problemas mostrando los resultados en una tabla

tengo un problema a la hora de mostrar registros en mi tabla el problema es el siguiente: en la cabecera de la tabla muestro las horas que seria ocho en total y abajo de la cabecera se muestran los resultados de los números que han salido de acuerdo a la hora y al día, pero el problema surje que la primera semana del día jueves se registraron unos datos y ahora la segunda semana del día jueves se deben registrar los otros datos de ese mismo día pero se me sigue mostrando en la misma fila cuando debería mostrarme los resultado del la segunada semana de ese día abajo porque se supone que son el mismo día pero diferentes resultados con diferentes fechas anexo una imagen y para mostrar un ejemplo como debería quedar.

https://prntscr.com/fidwnk

el codigo

<div id="test5" class="center-align light">

    <?php
    $consulta = $DB_con->query("SELECT * FROM hora_sorteo");
    for ($set = array (); $row = $consulta->fetch(PDO::FETCH_ASSOC); $set[] = $row);
    ?>
   <table class='striped responsive-table centered'>
   <thead>
   <tr>
   <?php for($i=0;$i<count($set);$i++){
echo "<th>" . $set[$i]['hora_sorteo'] . "</th>"; //muestra las horas de jugada
   }?>
   </tr>
    </thead>

    <?php
    $consulta2 = $DB_con->query("SELECT 
    animalitos.id,
    animalitos.numero,
    resultado.id,
    resultado.fk_animalitos,
    resultado.fk_hora_sorteo,
    resultado.fk_dias,
    resultado.fecha,
    hora_sorteo.id,
    hora_sorteo.hora_sorteo,
    dias.id,
    dias.dias
           FROM animalitos 
                INNER JOIN resultado ON animalitos.id=resultado.fk_animalitos  
                INNER JOIN hora_sorteo ON resultado.fk_hora_sorteo=hora_sorteo.id
                INNER JOIN dias ON resultado.fk_dias=dias.id
                WHERE resultado.fk_dias='5'  ORDER BY resultado.id ");
           for ($set2 = array (); $row = $consulta2->fetch(PDO::FETCH_ASSOC); $set2[] = $row);
              ?>
          <tr>
         <?php for($b=0;$b<count($set2);$b++){
         echo "<td>" . $set2[$b]['numero'] . "</td>"; //muestra los 
         resultados de los numeros
           }?>
          </tr>
        </table>
        </div>

1voto

Leonardo-Tadei comentado

Nos haría falta conocer las estructuras d elas tablas involucradas para poder ayudarte... a priori, tu query no incluye ningún discriminador de día de la semana para que los resultados se agrupen como los estás planteando.

Por favor, también explicitá el tipo de los campos fecha y hora.

2votos

yoclens comentado

hola leonardo la consulta se muestra bien en fk_dias='5' se guardan los días de la semana lunes, martes miercoles, jueves etc. un amigo me a informado que mi problema era este: pones TD, TD, TD, TD, TD, TD.... y nunca pones un TR

debes contar cuantos TD quieres ?? son 8... entonces pones una variable mas, o anidas otro for, es decir, dentro del que tienes, pones una variable de row después, la vas sumando y pones dentro del ciclo for una condicional, si el row > 8, entonces agregar un </tr><tr> y sigues con tus TD
pero te debes asegurar de escribir primero un <tr> antes del for, y finalizarlo </tr> despues del for
ahora bien, esa es una forma, la segunda forma, es crear otro for, uno que vaya con las semanas, es decir; semana1 (primer ciclo), semana 2 (segundo ciclo), etc... este ciclo debe escribir <tr> [[tucodigo]] </tr>; dentro de ese for, ahora colocas el que ya tienes que escribe <td> [[tuvalor]] </td> pero te aseguras de que solo tenga los valores de la semana que indica el primer for, es decir, el valor desde lunes a viernes de la semana 1 (o semana X en función del primer ciclo)
tu error esta en que no generar otro TR (o renglón), en función de la semana recorrida

1voto

Leonardo-Tadei comentado

Hola @yoclens,

tener guardado en fk_dias el día de la semana es una repetición de datos, porque con la fecha y la funció DATE() de MySQL podrías obtenerlo igual.

Respecto a lo que decís de los bucles, siempre es mejor la solución más simple, que tenga un solo bucle, que una que tenga dos.

Tu forma de recorrer los resultados es enmarañadamente compleja: un WHILE es la estructura adecuada para recorrer la respuesta d euna query, y un foreach es la estructura adecuanda para recorrer un vector, ya que PHP no garantiza que los índices vayan desde cero hasta el total -1.

Si la recorrida es por semanas, la variable de control que uses para generar los TR debería ir de a 7 elementos, y luego al final verifica que no haya quedado un TR sin cerrar: lo normal en estos casos.

Saludos cordiales

1 Respuesta

2votos

yoclens Puntos1770

ya lo pude resolver comparto la solución

<div id="test6" class="center-align light">

        <?php
$consulta = $DB_con->query("SELECT * FROM hora_sorteo");
for ($set = array (); $row = $consulta->fetch(PDO::FETCH_ASSOC); $set[] = $row);
?>
<table  class='striped responsive-table centered'>
<thead>
<tr>
<?php for($i=0;$i<count($set);$i++){
    echo "<th>" . $set[$i]['hora_sorteo'] . "</th>"; 
}?>
</tr>
</thead>

<?php
$consulta2 = $DB_con->query("SELECT 
animalitos.id,
animalitos.numero,
resultado.id,
resultado.fk_animalitos,
resultado.fk_hora_sorteo,
resultado.fk_dias,
resultado.fecha,
hora_sorteo.id,
hora_sorteo.hora_sorteo,
dias.id,
dias.dias
               FROM animalitos 
                    INNER JOIN resultado ON animalitos.id=resultado.fk_animalitos  
                    INNER JOIN hora_sorteo ON resultado.fk_hora_sorteo=hora_sorteo.id
                    INNER JOIN dias ON resultado.fk_dias=dias.id
                    WHERE resultado.fk_dias='6'  ORDER BY resultado.id ");
for ($set2 = array (); $row = $consulta2->fetch(PDO::FETCH_ASSOC); $set2[] = $row);
?>
<?php 

$set2 = array_chunk($set2, 8);
foreach($set2 as $set){
    echo "<tr>";
    foreach($set as $v){
        echo "<td>" . $v['numero'] . "</td>"; 
    }
    echo "</tr>";
}

?>
</table>
 </div>

0voto

Peter comentado

Gracias por compartir la solución!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta