Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sames Davis

Selecionar True e False em Select

Recommended Posts

Olá pessoal,

Tenho um form em minha aplicação que filtra vários registros, um desses filtros é se o produto está com status de bloqueado ( True/False )

Se eu marcar a checkbox a minha intenção é que ele também exiba os registros que estão marcados como bloqueado.

Só que o que está acontecendo é que eu não estou sabendo montar essse tipo de filtro dentro do select, quando marco o checkbox ele traz apenas os que estão com TRUE e se eu deixar desmarcado ele traz os que estão com FALSE.

A minha proceduire está assim:

O tipo de campo é TINYINT(1)

na verdade são dois campos o bloqueado e o inativo

 

 

 

CREATE DEFINER = 'root'@'localhost' PROCEDURE `spProdutosConsultar`(
IN pBuscaGeral1 VARCHAR(50),
IN pBuscaGeral2 VARCHAR(50),
IN pfiltrolocalestoque VARCHAR(20),
IN pfiltrobloqueado TINYINT(1),
IN pfiltroinativo TINYINT(1)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT
`tblprodutos`.`ordem`,
`tblprodutos`.`codigo`,
`tblprodutos`.`descricaolonga`,
`tblfabricantes`.`descricao`,
`tblprodutos`.`codfabricante`
FROM
`tblprodutos`
LEFT JOIN `tblfabricantes` ON `tblfabricantes`.`ordem` =
`tblprodutos`.`ordem_fabricante`
WHERE
(tblprodutos.codigo LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.descricaolonga LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.descricaocurta LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codean LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codfabricante LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codoriginal LIKE CONCAT('%', pBuscaGeral1, '%')) AND
(tblprodutos.codigo LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.descricaolonga LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.descricaocurta LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codean LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codfabricante LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codoriginal LIKE CONCAT('%', pBuscaGeral2, '%')) AND
tblprodutos.localestoque LIKE CONCAT('%', pfiltrolocalestoque, '%') AND
tblprodutos.bloqueado = pfiltrobloqueado AND
tblprodutos.inativo = pfiltroinativo
ORDER BY
tblprodutos.descricaolonga;
END;

 

Sei que tenho de usar o WHEN ou o IF, mas não estou sabendo usar, alguém pode me ajudar nessa procedure?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então

 

tblprodutos.inativo = pfiltroinativo [0,1]

 

o comportamento da resposta é o esperado.

 

Se vc colocar '1' vai trazer todos os que tem '1' no itblprodutos.inativo e nenhum diferente disso, mesma coisa pro zero.

 

Eu acho q o que vc quer é uma marcação e não uma filtragem, o que se faz com IF não com where (where só serve pra tirar linhas basicamente)

 

então seria,

SELECT
`tblprodutos`.`ordem`,
`tblprodutos`.`codigo`,
`tblprodutos`.`descricaolonga`,
`tblfabricantes`.`descricao`,
`tblprodutos`.`codfabricante`,
if(tblprodutos.inativo = 1,'BLOQUEADO','DESBLOQUEADO')
FROM
`tblprodutos`
LEFT JOIN `tblfabricantes` ON `tblfabricantes`.`ordem` =
`tblprodutos`.`ordem_fabricante`
WHERE
(tblprodutos.codigo LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.descricaolonga LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.descricaocurta LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codean LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codfabricante LIKE CONCAT('%', pBuscaGeral1, '%') OR
tblprodutos.codoriginal LIKE CONCAT('%', pBuscaGeral1, '%')) AND
(tblprodutos.codigo LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.descricaolonga LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.descricaocurta LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codean LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codfabricante LIKE CONCAT('%', pBuscaGeral2, '%') OR
tblprodutos.codoriginal LIKE CONCAT('%', pBuscaGeral2, '%')) AND
tblprodutos.localestoque LIKE CONCAT('%', pfiltrolocalestoque, '%') AND
tblprodutos.bloqueado = pfiltrobloqueado AND
tblprodutos.inativo = pfiltroinativo
ORDER BY
tblprodutos.descricaolonga;

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Luiz Henrique
      Tenho uma consulta entre várias tabelas, e 2 das clausulas é soma. Essa funciona SUM(t3.valor_servico*t3.quantidade)... Com essa junta não. SUM(CASE WHEN tab1.codigo = tab2.codigo THEN tab2.valor END) AS valor_pago Tentei fazer igual a de cima mas não rolou, então li a respeito do CASE, e tentei isso acima.
       
      Ocorre que o sistema tem opção de efetuar vários pagamentos em datas diferentes até que o valor total seja quitado.
      No caso, tenho uma tabela para armazenar o valor pago(valor), quem pagou (codigo) entre outras coisas, denominada como tab2 e a tab1 com outras informações, e o codigo.
       
      Não sei se é possível, mas estou precisando que esses 2 SUM estejam na mesma consulta porque fiz a condição acima sozinha para teste e funciona, então não faço ideia do que ocorre.
       
      o sql inteiro é esse, e preciso somar a  quantidade paga de cada ticket.
       
      $sql = mysqli_query($conexao, "SELECT *, SUM(st.valor_servico*st.quantidade) AS soma_servico FROM ticket t JOIN clientes c ON t.id_cliente = c.id_cliente JOIN servico_ticket st ON t.id_ticket = st.id_ticket JOIN status sts ON sts.id_status = t.status JOIN usuarios us ON us.id_user = t.atendente JOIN pagamento_ticket pgt WHERE t.id_loja ".$condLoja." AND ".$acao_status." GROUP BY t.id_ticket")or die (mysqli_error()); Obrigado.
       
×

Informação importante

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