Jump to content
Fórum Script Brasil
  • 0

como executar o if so uma vez


adrsublimacao

Question

exemplo tenho um select que pega o valor do maior item do pedido
 
$pegarmaiorvalor = $connect->query("SELECT MAX(valor) AS valor FROM store WHERE idsecao = '".$_POST["venda_id"]."' AND idu = '$cod_id' ");
$pegarmaiorvalorx       = $pegarmaiorvalor->fetch(PDO::FETCH_OBJ);
$valorStore                 = $pegarmaiorvalorx->valor;
$idprodutoStore                 = $pegarmaiorvalorx->produto_id;
 
ai tenho um select dos produtos do pedido
$produtosca     = $connect->query("SELECT * FROM store WHERE idsecao = '".$_POST["venda_id"]."' AND idu = '$cod_id' ORDER BY id DESC");
$produtoscx     = $produtosca->rowCount();
 
e um lop dos produtos
  while ($carpro = $produtosca->fetch(PDO::FETCH_OBJ)) {
            $nomepro  = $connect->query("SELECT * FROM produtos WHERE id = '".$carpro->produto_id."' AND idu = '$cod_id'");
                    $nomeprox = $nomepro->fetch(PDO::FETCH_OBJ);
 
$x = 0;
 
$codigo= $nomeprox->id;
            $quatidade = $carpro->quantidade;
            $nomeproduto= $nomeprox->nome; // NOME DO PRODUTO
            $desconto = 0;
            $preço = $carpro->valor;
       
ai tenho esse if que queria q ele executase apenas uma vez e aplicase o desconto somente no item de maior valor
porque se deixar percorrer e tiver dois item com mesmo id e valor vai dar erro porque vai aplicar desconto nos 2 itens
            if ($codigo == $idprodutoStore) {
 
            $data_nfe['produtos'][$x] = array(
                'item' => $codigo, // ITEM do produto
                'nome' => $nomeproduto, // Nome do produto
                'desconto' => $pedido->vdesconto, // Desconto          
                'total' => number_format($preco_total, 2, '.', ''), // preço total (quantidade x preço unitario) - sem descontos
               
               
               
            );
             } else {
 
                $data_nfe['produtos'][$x] = array(
                'item' => $codigo, // ITEM do produto
                'nome' => $nomeproduto, // Nome do produto
                'desconto' => $desconto, // Desconto            
                'total' => number_format($preco_total, 2, '.', ''), // preço total (quantidade x preço unitario) - sem descontos
               
               
            );
             }
                     
   $x++;
 
        }
 
 
resumindo se alguém souber algo mais simples queria pegar o item de maior valor do pedido e aplicar o valor do desconto que foi dado apenas nesse item e na minha tabela ali é o vdesconto
Edited by adrsublimacao
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 1

Como o prouduto se repete inúmeras vezes na mesma fatura, então você pode esquecer o produto_id como referência do desconto.

Nesse caso, só sobrou a chave primária da tabela store, onde você não pode usar a função MAX para achar o maior valor, porque com essa função não dá para pegar o id.

Você precisa ordenar a tabela store por valor em ordem decrescente, e assim você pega o valor e o id do registro que estiver no topo, assim:

<?php
// mysql CREATE TABLE `store` (`id` int NOT NULL, `valor` float DEFAULT NULL,
// 'idsecao` int DEFAULT NULL, `idu` int DEFAULT NULL,`produto_id` int 
// DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=innoDB DEFAULT CHARSET=utf8mb4 
// COLLATE=utf8mb4_0900_ai_ci (1,10,1,1,1)(2,20,1,1,2)(3,30,1,1,3)
$_POST["venda_id"]=1;
$cod_id=1;
$connect=new PDO('mysql:host=localhost;dbname=laravel',"root","");
$stmt = $connect->query("SELECT id, valor FROM store WHERE idsecao = 
	'".$_POST["venda_id"]."' AND idu = '$cod_id' 
	order by valor desc limit 1");
$maiorValores = $stmt->fetchAll(PDO::FETCH_OBJ)[0];
$maiorValor = $maiorValores->valor;
$idMaiorValor = $maiorValores->id;
$stmt = $connect->query("SELECT * FROM store WHERE idsecao = 
	'".$_POST["venda_id"]."' AND idu=$cod_id");
$fatura=$stmt->fetchAll(PDO::FETCH_OBJ);
echo "<table><th>id<th>valor<th>id<th>desconto";
foreach($fatura as $item){
    $desconto=0;
    if($item->id==$idMaiorValor){$desconto=$item->valor;}
    echo "<tr><td>$item->id<td>$item->valor<td>$item->id<td>$desconto";}

 

Captura de tela 2023-12-11 125517.png

Edited by Frank K Hosaka
Link to comment
Share on other sites

  • 0
// Verificar se o maior valor foi encontrado
if ($pegarmaiorvalorx && $produtoscx > 0) {
    $maiorProduto = null;
    $maiorValor = -1; // Inicializar com um valor baixo
    
    // Encontrar o produto de maior valor
    while ($carpro = $produtosca->fetch(PDO::FETCH_OBJ)) {
        if ($carpro->valor > $maiorValor) {
            $maiorProduto = $carpro;
            $maiorValor = $carpro->valor;
        }
    }
    
    // Se o maior produto foi encontrado
    if ($maiorProduto !== null) {
        $x = 0;
        
        // Iterar sobre os produtos novamente para aplicar o desconto apenas no maior valor
        $produtosca->execute(); // Resetar o cursor
        while ($carpro = $produtosca->fetch(PDO::FETCH_OBJ)) {
            $codigo = $carpro->produto_id;
            $quatidade = $carpro->quantidade;
            $desconto = ($codigo == $maiorProduto->produto_id) ? $pedido->vdesconto : 0; // Aplicar desconto apenas no item de maior valor
            $preço = $carpro->valor;
            
            $nomepro = $connect->query("SELECT * FROM produtos WHERE id = '".$codigo."' AND idu = '$cod_id'");
            $nomeprox = $nomepro->fetch(PDO::FETCH_OBJ);
            $nomeproduto = $nomeprox->nome; // NOME DO PRODUTO

            $data_nfe['produtos'][$x] = array(
                'item' => $codigo, // ITEM do produto
                'nome' => $nomeproduto, // Nome do produto
                'desconto' => $desconto, // Desconto          
                'total' => number_format($preco_total, 2, '.', ''), // preço total (quantidade x preço unitario) - sem descontos
            );

            $x++;
        }
    } else {
        // Se o maior produto não foi encontrado, aplicar desconto padrão em todos os itens
        while ($carpro = $produtosca->fetch(PDO::FETCH_OBJ)) {
            $codigo = $carpro->produto_id;
            $quatidade = $carpro->quantidade;
            $desconto = $pedido->vdesconto; // Aplicar desconto padrão em todos os itens
            $preço = $carpro->valor;

            $nomepro = $connect->query("SELECT * FROM produtos WHERE id = '".$codigo."' AND idu = '$cod_id'");
            $nomeprox = $nomepro->fetch(PDO::FETCH_OBJ);
            $nomeproduto = $nomeprox->nome; // NOME DO PRODUTO

            $data_nfe['produtos'][$x] = array(
                'item' => $codigo, // ITEM do produto
                'nome' => $nomeproduto, // Nome do produto
                'desconto' => $desconto, // Desconto          
                'total' => number_format($preco_total, 2, '.', ''), // preço total (quantidade x preço unitario) - sem descontos
            );

            $x++;
        }
    }
} else {
    // Se não houver produtos, provavelmente não há necessidade de continuar
    echo "Não há produtos ou o maior valor não foi encontrado.";
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...