Tengo dos tablas para mostrar los servicios diarios de cada empleado registrado. Una de las tablas contiene los servicios de día actuales para cada uno, la otra contiene los servicios semanales de cada uno y en esta tabla cada día siempre hay más de un registro para mostrar, y este es mi problema.

La primera tabla funciona perfectamente, obtento los datos usando GROUP CONCACT y agrupo por nombre de empleado, dividido en los momentos correctos y muesto sin problemas. En la segunda tabla la solución parece tener que ser diferente porque en ella necesito agrupar los datos por el nombre de cada empleado y al mismo tiempo agrupar los datos por cada día de la semana.

Aquí está mi código para la primera tabla:

$result_usuario = "SELECT
    events.date AS semana,
    employees.id_employee AS idemp,
    employees.nome AS nome,

    GROUP_CONCAT(employees.nome
        ORDER BY events.date, employees.nome, period) AS nome,
    GROUP_CONCAT(customers.nome
        ORDER BY events.date, employees.nome, period) AS nome2,
        GROUP_CONCAT(customers.id_customer
        ORDER BY events.date, employees.nome, period) AS id,
        GROUP_CONCAT(customers.adress
        ORDER BY events.date, employees.nome, period) AS address,
        GROUP_CONCAT(customers.phone
        ORDER BY events.date, employees.nome, period) AS phone,
        GROUP_CONCAT(events.id_event
        ORDER BY events.date, employees.nome, period) AS idevent,
        GROUP_CONCAT(events.price
        ORDER BY events.date, employees.nome, period) AS price,
        GROUP_CONCAT(events.frequence
        ORDER BY events.date, employees.nome, period) AS freq,
        GROUP_CONCAT(events.period
        ORDER BY events.date, employees.nome, period) AS period,
        GROUP_CONCAT(events.date
        ORDER BY events.date, employees.nome, period) AS dia
FROM
    events
        INNER JOIN
    employees ON employees.id_employee = events.id_employee
        INNER JOIN
    customers ON customers.id_customer = events.id_customer
    WHERE WEEK(events.date)=WEEK(NOW()) and employees.id_employee=events.id_employee
GROUP BY semana
ORDER BY semana, nome ASC"

$resultado_dados = mysqli_query($link, $result_dados);

if(($resultado_dados) AND ($resultado_dados->num_rows != 0)){
?>
<div class="logo">
    <img src="../assets/img/Logo.png" alt = "logojjl" style="padding-bottom:8px;"><br>
    <a class="btn btn-primary btn-sm"  name="print" href="#" type="button">Week</a>
</div>
<p class="card-category" style="padding-left: 13px; padding-top: 8px;">Date: <?php echo date("m/d/y") ?></p>

<table class="table table-sm table-hover">
    <thead>
       <tr>
          <th>Employee</th>
          <th>Customer</th>
          <th>Customer</th>
          <th>Customer</th>
       </tr>
    </thead>
    <tbody>
        <?php
           while($row_usuario = mysqli_fetch_assoc($resultado_dados)){
              $id = explode(',', $row_usuario['id']);
              $cust = explode(',', $row_usuario['nome2']);
              $phone = explode(',', $row_usuario['phone']);
              $address = explode(',', $row_usuario['address']);
              $idev = explode(',', $row_usuario['idevent']);
              $price = explode(',', $row_usuario['price']);
              $freq = explode(',', $row_usuario['freq']);
              $date = explode(',', $row_usuario['dia']);
              $period = explode(',', $row_usuario['period']);

         ?>


        <tr>
            <td><?php echo $row_usuario["nome"]; ?></th>

            <?php 
            for($i=0; $i < count($cust); $i++ ) { 
            ?>        
            <td><a type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#visu" value="<?php echo $id[$i]; ?>"><?php echo $cust[$i]; ?></a>


            </td>

El código anterior hace exactamente lo que necesito para la vista diaria, pero no puedo encontrar una respuesta basada en ese código para la vista semanal. He intentado hacer algunos cambios, pero los resultados son siempre contrarios a lo que quiero. La primera tabla es más fácil porque el contenido mostrado está todo en la misma línea y puedo dividir los registros sin problema, el problema con la segunda tabla es que en cada día de la semana hay más de un registro para mostrar y cada registro debe estar vinculado a la derecha Empleado.

¿Puede alguien ayudarme a encontrar una solución basada en este código donde pueda agrupar los registros de cada empleado y, al mismo tiempo, estos registros agrupados por los días de la semana? Necesito algo que considere la posibilidad de que no haya registros algún día de la semana, en cuyo caso el espacio de la tabla estaría vacío, esto también debe ser considerado.

0
Wilson Neto 5 nov. 2019 a las 01:09

1 respuesta

Uso

WEEK(events.date) AS semana 

en el código Select.

Esto le daría el número de la semana para agruparlo y ordenarlo

La fucción tiene una opción para seleccionar el primer día de la semana.

0
nbk 4 nov. 2019 a las 22:43
58701798