Query data in different arrays for report

0

Well to avoid too much processing in my Mysql when generating a report, I'd rather do a simple select and put it in an array, so I have more freedom to manipulate the data.

But I came across a difficulty, where I have 3 different arrays, and I need to bind the data using the cod and cod_produto field.

Does anyone know how I can do this? The following is a very simple example of the report I am putting together. It's functional, just missing the last 2 fields, where I have to query in a different array.

NOTE: The fields cod and cod_produto are equal and do not repeat, ie each product has its code.

<?php

// Consulta produtos no BD
$consulta = Query($mysqli, "select cod,nome,unidade,peso from produto");
while ($resultado = mysqli_fetch_object($consulta)) {

    // Array com dados dos produtos
    $produtos[] = array(
        "cod" => $resultado->cod,
        "nome" => $resultado->nome,
        "unidade" => $resultado->unidade,
        "peso" => $resultado->peso
    );  
}

// Consulta os valores
$consulta = Query($mysqli, "select cod_produto,valor,desconto,comissao from valores_produto");
while ($resultado = mysqli_fetch_object($consulta)) {

    // Array com dados dos produtos
    $valores[] = array(
        "cod_produto" => $resultado->cod_produto,
        "valor" => $resultado->valor,
        "desconto" => $resultado->desconto,
        "comissao" => $resultado->comissao
    );  
}

// Consulta as promoções
$consulta = Query($mysqli, "select cod_produto,valor,desconto,comissao from promocoes_produto");
while ($resultado = mysqli_fetch_object($consulta)) {

    // Array com dados dos produtos
    $promocoes[] = array(
        "cod_produto" => $resultado->cod_produto,
        "valor" => $resultado->valor,
        "desconto" => $resultado->desconto,
        "comissao" => $resultado->comissao
    );  
}

// Organiza o array pelo nome
uasort($produtos, function ($a, $b) {
    return strcmp($a['nome'], $b['nome']);
});
?>

<table>
    <th>
        <td>COD</td>
        <td>NOME</td>
        <td>UNIDADE</td>
        <td>VALOR</td>
        <td>PROMOÇÃO</td>
    </th>
    <?php
    // Navega pelos elementos do array
    foreach ($produtos as $c) {
        ?>
        <tr>
            <td><?= $c['cod'] ?></td>
            <td><?= $c['nome'] ?></td>
            <td><?= $c['unidade'] ?></td>
            <td>aqui tenho que por o valor do array 'valores'</td>
            <td>aqui tenho que por o valor do array 'promocoes'</td>
        </tr>
        <?php
    }
    ?>
</table>
    
asked by anonymous 14.06.2017 / 13:41

1 answer

1

You can use the "cod_prod" field to resolve this. In the loops of values and promotions, instead of you always assign the array to a new position, you will inform the key which will be the product code, since the same is a single value will work perfectly. And in the view you will pass the respective array ($ values, $ promotions) by accessing the key with the "cod" of the product and passing the field you want to get the value.

<?php

    // Consulta produtos no BD
    $consulta = Query($mysqli, "select cod,nome,unidade,peso from produto");
    while ($resultado = mysqli_fetch_object($consulta)) {

        // Array com dados dos produtos
        $produtos[] = array(
            "cod" => $resultado->cod,
            "nome" => $resultado->nome,
            "unidade" => $resultado->unidade,
            "peso" => $resultado->peso
        );  
    }

    // Consulta os valores
    $consulta = Query($mysqli, "select cod_produto,valor,desconto,comissao from valores_produto");
    while ($resultado = mysqli_fetch_object($consulta)) {

       // Array com dados dos produtos
       $valores[$resultado->cod_produto] = array(
           "cod_produto" => $resultado->cod_produto,
           "valor" => $resultado->valor,
           "desconto" => $resultado->desconto,
           "comissao" => $resultado->comissao
       );  
    }

    // Consulta as promoções
    $consulta = Query($mysqli, "select cod_produto,valor,desconto,comissao from promocoes_produto");
    while ($resultado = mysqli_fetch_object($consulta)) {

       // Array com dados dos produtos
       $promocoes[$resultado->cod_produto] = array(
           "cod_produto" => $resultado->cod_produto,
           "valor" => $resultado->valor,
           "desconto" => $resultado->desconto,
           "comissao" => $resultado->comissao
       );  
    }

   // Organiza o array pelo nome
   uasort($produtos, function ($a, $b) {
       return strcmp($a['nome'], $b['nome']);
   });
?>

<table>
    <th>
        <td>COD</td>
        <td>NOME</td>
        <td>UNIDADE</td>
        <td>VALOR</td>
        <td>PROMOÇÃO</td>
    </th>
<?php
    // Navega pelos elementos do array
     foreach ($produtos as $c) { 
         $cod_produto = $c['cod'];
     ?>
        <tr>
            <td><?php echo $c['cod'] ?></td>
            <td><?php echo $c['nome'] ?></td>
            <td><?php echo $c['unidade'] ?></td>
            <td><?php echo $valores[$cod_produto]['valor'] ?></td>
            <td><?php echo $promocoes[$cod_produto]['valor'] ?></td>
        </tr>
    <?php } ?>
</table>
    
14.06.2017 / 14:07