Ir para conteúdo
Fórum Script Brasil
  • 0

como executar o if so uma vez


adrsublimacao

Pergunta

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
Editado por adrsublimacao
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...