How to assemble a table with Current Week Number plus the next 15 Weeks

Asked

Viewed 276 times

-2

How can I build a table (HTML + PHP) using the current week number and the next 15 weeks, for example:

Semana Atual é 29 então teremos 29+15 = 44

The table will display the information obtained from the database from week 29 to week 44

follows an example of how data can be obtained Informações

Complement: Another difficulty would be when we are near the end of the year, where this table will need to display the information of the two years for example: 2015/2016

Semana 42 + 15 = 57 (Porém o numero máximo de semanas por ano é 52)
Então teríamos 57-52 = 5 e o resultado a ser exibido seria
2015: 42-43-44-45-46-47-48-49-50-51-52
2016: 1-2-3-4-5

If there is no way I can display only 1 year at a time.

1 answer

1


I’ve already solved my own doubt, thank you all for your attention.

Code used as a basis for solving doubts.

  // volta para segunda
  $date = new DateTime('first monday this week');
  // numero de semanas desejadas
  $semanas = 15;
  // array de queries
  $query_semanal = array();

  // enquanto tiver semanas
  while($semanas > 0) {
      // clonamos a data
      $fim = clone $date;
      // adicionamos 6 dias, para chegar no 'sabado'.
      $fim->modify('+6 day');

      // adicionando a query
      $query_semanal[] = sprintf("(SELECT COUNT(*) FROM vendas WHERE vendas.data_venda BETWEEN '%s' AND '%s' AND vendas.codproduto = produtos.codproduto) as semana_%s", $date->format('Y-m-d'), $fim->format('Y-m-d'), $date->format('W'));

      // movemos a data principal para a próxima segunda
      $date->modify('+7 day');

      // diminui o número de semanas
      $semanas--;
  }

  // montando a query final
  $query_final = sprintf('
      SELECT produtos.codproduto,
             produtos.nome,
             produtos.cor,
             %s
        FROM produtos', implode(', ' . PHP_EOL, $query_semanal));

  echo '<pre>';
  echo $query_final;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.