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 _marlon307
      Tenho uma tabela em meu banco de dados em que as colunas usuário e e-mail são do tipo unio. Como faço para verificar as duas colunas ao mesmo tempo e retorna um valor se encontrar um registro iguai.
    • Por leonardo021970
      Tem alguma maneira de capturar todas as urls do site?
      Testei pelo google mas ele retorna apenas alguns resultados pelo jeito que testei
    • Por _marlon307
      Estou fazendo um sistema simples de cadastro de usuário e preciso que o usuário e e-mail sejam únicos. Mas já configurei a minha tabela para que esses campos seja único. O problema e fazer a checagem para que não retorne erros, e sim redirecionar para pagina de cadastro.
       
      Código:
      <?php require_once 'config/connect.php'; $usermail = mysqli_real_escape_string($link, $_POST['email']); $username = mysqli_real_escape_string($link, $_POST['usuario']); $userpsw = mysqli_real_escape_string($link, $_POST['senha']); $sql = "SELECT usuario, email FROM `tb_usuarios` WHERE `usuario` = '$username', `email` = '$usermail'"; mysqli_query($link, $sql) or die(mysqli_error($link)); $linhas = mysqli_affected_rows($link); if($linhas > 0) { header("Location:cadastro"); } else { $sql = "INSERT INTO tb_usuarios (usuario, senha, email) VALUES ('$username','$userpsw','$usermail')"; mysqli_query($link,$sql) or die(mysqli_error($link)); $linhas = mysqli_affected_rows($link); if($linhas > 0) { header("Location:login"); } } ?>  
    • Por eduardom
      Olá.
       
      Tentarei exemplificar o problema.
       
      Tenho uma tabela com duas colunas e seus respectivos conteúdos:
      VALOR (int), DATA (datetime)
      1, 2018-12-10 20:50:00
      5, 2018-12-13 12:00:00
      4, 2018-12-13 13:00:00
      3, 2018-12-13 17:00:00
      2, 2018-12-15 06:00:00
      9, 2018-12-15 08:00:00
       
      Consulto as informações, por exemplo:
       
      SELECT * FROM TABELA WHERE DATA BETWEEN '2018-12-13 00:00:00' AND '2018-12-13 23:59:59'
       
      Está me trazendo somente os valores 4 e 5, o 3 ele não trás, porém todos estão dentro do período.
      Com isso, estou perdendo registros nas consultas.
      Buscando somente o valor 3 direto, (SELECT * FROM TABELA WHERE VALOR = 3), ele trás a informação normalmente.
      Adicionei e removi os índices, tentei otimizar a tabela, porém nada resolve.
      Não sei se envolve o tamanho da tabela, pois há 2.782.219 registros na mesma.
       
      Estrutura da tabela: InnoDB
      Formatação da tabela: utf8_general_ci
       
      Se alguém tiver uma luz...
    • Por nosredna
      Olá amigos, vocês poderiam me ajudar?
       
      Eu tenho a input abaixo em PHP, quando eu acabar de digitar algo eu desejo que ela selecione o texto digitado automaticamente. É possível? Como eu faria?
      Exemplo abaixo:

       
      Agradeço a ajuda. Valeuuuu.
×

Informação importante

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