Query data in different arrays for reporting

Asked

Viewed 69 times

0

Good to avoid too much processing in my Mysql when generating a report, I prefer to make a simple select and put 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 link the data using the field cod and cod_produto.

Does anyone know how I do that? Below is a very simple example of the report I’m putting together. It is functional, just put the last 2 fields, where I have to query in a different array.

OBS: The fields cod and cod_produto are equal and do not repeat, ie each product has its own 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>
  • Doubt, this "cod_product" is a unique value?

  • Yes, each product has its own. This does not repeat as it is a primary key in the BD table

1 answer

1


You can use the "cod_prod" field to resolve this. In the value loops and promotions, instead of you always assign the array to a new position, you will inform the key that will be the product code, since the same is a unique value will work perfectly. And in the view you will pass the respective array($values, $promocoes) 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>
  • Um got it, there’s a mistake here $cod_produto = $['cod']; sure would be $cod_produto = $c['cod']; ?

  • I will test here, I warn you if it worked and I remember your answer ok.

  • Right, I’ll edit and fix the bug there.

  • Friend I tested here and it worked 100%, thank you so much for your help.

  • For nothing my friend, good luck there!

Browser other questions tagged

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