Ir para conteúdo
Julio Cavallari

Problema ao selecionar valor minimo numa tabela

Recommended Posts

Estou tentando executar uma query para retornar pra mim qual o valor minimo de uma coluna:

SELECT MIN(nfatura) as nfatura_min FROM `financeiro` WHERE pedido = "857087" AND situacao = 'N';

O problema é que ela me retorna como menor valor 10

Spoiler

image.png.ebf03739acee371a98da987b29e46099.png

 

Só que esse não é o menor valor. Como podem ver no select abaixo, o menor valor pra essa coluna é 2 segundo as cláusulas que coloquei:

Spoiler

image.png.9b54174fccd5b368ba15e43a1f3ce8a4.png

Onde está o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro nenhum, caso a coluna seja tipo string.

tente mudar p/ 1 tipo numerico, como int por exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, Fernando C disse:

erro nenhum, caso a coluna seja tipo string.

tente mudar p/ 1 tipo numerico, como int por exemplo

 

11 minutos atrás, Fernando C disse:

erro nenhum, caso a coluna seja tipo string.

tente mudar p/ 1 tipo numerico, como int por exemplo

SELECT nfatura FROM `financeiro` WHERE pedido = "857087" AND situacao = 'N' ORDER BY nfatura ASC LIMIT 1;

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Fernando C disse:

erro nenhum, caso a coluna seja tipo string.

tente mudar p/ 1 tipo numerico, como int por exemplo

Era esse mesmo o problema, estava como varchar o campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra alternativa é somar com 0 (zero) o valor da coluna, assim o MySql faz o CAST automatico para INT. 

Assim não precisaria alterar o tipo do campo, que as vezes pode gerar impacto em outra parte do sistema.

Teste no Fiddle:

LInk Fiddle

CREATE TABLE Persons (
    PersonID varchar(255)
);

INSERT INTO Persons (PersonID) VALUES ('1'),('2222'),('3'),('4'),('5');

SELECT MAX(PersonID + 0) FROM Persons

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 10/08/2018 at 16:48, Uerlen Santos disse:

Uma outra alternativa é somar com 0 (zero) o valor da coluna, assim o MySql faz o CAST automatico para INT. 

Assim não precisaria alterar o tipo do campo, que as vezes pode gerar impacto em outra parte do sistema.

Teste no Fiddle:

LInk Fiddle


CREATE TABLE Persons (
    PersonID varchar(255)
);

INSERT INTO Persons (PersonID) VALUES ('1'),('2222'),('3'),('4'),('5');

SELECT MAX(PersonID + 0) FROM Persons

 

Muito obrigado pelo dica, bom saber disso, pode ser útil, mas nesse caso alterar o tipo do campo era a melhor solução mesmo, não utilizo em mais lugar nenhum os dados desse campo, somente nessa tabela mesmo. E como ela só pode receber número inteiros via verificação no script PHP não teria porque deixar o campo como varchar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Trabalhe com o tipo correto , evita complicações desnecessárias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por M. Alberto
      O que preciso alterar para acessar meu banco de dados remotamente?
       
      Tenho o IP e outros dados... como faço com este código?
       
      <?php $link = mysql_connect('localhost', 'USUARIO_NOME', 'SENHA_ACESSO'); if (!$link) { die('Não conseguiu conectar: ' . mysql_error()); } $db_selected = mysql_select_db('BANCODEDADOS_NOME', $link); if (!$db_selected) { die ('Não pode selecionar o banco : ' . mysql_error()); } $rst_pedidos=mysql_query("SELECT * FROM pedidosgarotao WHERE impresso='nao' ORDER BY id",$link); $num_pedidos=mysql_num_rows($rst_pedidos); if ($num_pedidos==0) { ?>  
    • Por M. Alberto
      Estou realizando a migração de meu site que utiliza um banco de dados em mySQL PHP porém estou obtendo erro.
       
      Criei o banco de dados e fiz upload dos arquivos, porém agora neste servidor não roda de maneira alguma. Alguém poderia me ajudar ?
    • Por netocazuza
      Tenho uma rotina em php que está funcionando, gravando os dados numa tabela. Agora surgiu a necessidade de fazer dois testes antes da gravação, e eu não estou conseguindo ter idéia de como fazer, por isso vou postar no próprio código pra ver se entendem. O primeiro teste, é ver se o número escolhido, já foi selecionado (variável numero), e caso isso ocorra, não gravar. O outro teste é impedir que o mesmo usuário (usuário apostador)faça mais de uma aposta. Segue código:
      <?php require_once 'init.php'; // pega os dados do formuário $data_hora = isset($_POST['data_hora']) ? $_POST['data_hora'] : null; $apostador = isset($_POST['apostador']) ? $_POST['apostador'] : null; // quero que esse apostador não se repita. Se já estiver na tabela, avisar e sair. $telefone = isset($_POST['telefone']) ? $_POST['telefone'] : null; $numero = isset($_POST['numero']) ? $_POST['numero'] : null; // quero que cheque esse número na tabela existente, e caso exista, retornar para inserir outro.     // validação (bem simples, só pra evitar dados vazios) if (empty($data_hora) || empty($apostador) || empty($telefone) || empty($numero)) {     echo "Volte e preencha todos os campos";     exit; } $hoje = date("d-m-Y H:i"); $limite = ('08-03-2019 16:35');    if (strtotime($hoje) >= strtotime($limite)){         echo "Esgotado o horario limite. Aguarde para o próximo sorteio!";         exit;     } // a data vem no formato dd/mm/YYYY // então precisamos converter para YYYY-mm-dd // insere no banco $PDO = db_connect(); // Acredito que esse teste deva ser feito aqui, antes de gravar, mas é só um palpite, pois tô mais perdido do que padre (alguns) em boate //verificar se apostador e numero já existem na tabela, e caso exista, retornar o fluxo $sql = "INSERT INTO palpites(data_hora, apostador, telefone, numero) VALUES(:data_hora, :apostador, :telefone, :numero)"; $stmt = $PDO->prepare($sql); $stmt->bindParam(':data_hora', $data_hora); $stmt->bindParam(':apostador', $apostador); $stmt->bindParam(':telefone', $telefone); $stmt->bindParam(':numero', $numero);     if ($stmt->execute()) {     header('Location: index.php'); } else {     echo "Erro ao cadastrar";     print_r($stmt->errorInfo()); }
    • Por lucasrodrigues
      Estou com esse problema ao tentar vincular uma tabela do MySql a um DataSet. Utilizo o MySqlConnector 8.0.13, MySql-For-VisualStudio 1.2.8.

    • Por Charlie04
      Tenho uma tabela de mídias que contem ID e nome das mídias e outra com locais onde existe o ID da midia que esta no local (1 local pode der + de 1 midia ).
      Gostaria de ajuda pra conseguir selecionar quantas mídias iguais estão em cada locais.

      MIDIAS
      ID                   |    Nome 
                   
      1                    |    Coca-cola
      2                    |    Painel Disponível
      3                    |    Fanta
       
       
      IDLOCAL           IDMIDIA                               
      1                    |    1
      1                    |    1
      1                    |    2
      1                    |    3
      2                    |    1 
      1                    |    2
      2                    |    3
      2                    |    1
      1                    |    2
      2                    |    2
       
      A resposta que eu queria é parecida com isso , mas não estou conseguindo montar o select :(
      Contar quantas vezes determinado IDMIDIA aparece no mesmo IDLOCAL;
       
      IDLOCAL                    IDMIDIA                          Quantidade         
      1                             |    Coca-cola                             | 2
      1                             |    Painel Disponível                | 3
      1                             |    Fanta                                     | 1
      2                             |    Fanta                                     | 1
      2                             |    Painel Disponível                | 1
      2                             |    Coca-cola                             | 2
       
       

      Se alguém puder me ajudar eu agradeço, sou iniciante então por isso a duvida provavelmente seja básica , desde já Obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.