Ir para conteúdo

POWERED BY:

Arquivado

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

Josuel S.H

Contar se condição no WHERE for true

Recommended Posts

Olá a todos do forum!

 

Bom, hoje vim aqui pedir ajuda a vocês, já tentei e pesquisei também mas ainda continuo encurralado, não estou conseguindo fazer o que quero, então acho que vocês podem me ajudar...

 

É o seguinte, em minha página php na minha query tem um SELECT, e então tenho algumas condições WHERE, o que eu quero nada mais é do que contar quantas comprações do WHERE foram true/verdadeiras. Vou mostrar abaixo como é a ideia para vocês entenderem.

 

Minha query é assim:

SELECT * FROM lista WHERE coluna_1 = "a" OR coluna_3 = "c";

 

No caso da query acima, seleciona apenas os registros que tem a sua coluna_1 igual a A ou coluna_3 igual a C.

 

Aí quando a condição dentro do WHERE for true/verdadeira, quero colocar um contador. Por exemplo:

SELECT *, @contador := 0 as contador FROM lista WHERE IF(coluna_1 = "a", @teste := @teste + 1, @teste := @teste) OR IF(coluna_3 = "c", @teste := @teste + 1, @teste := @teste);

 

Fazendo com eu obter o seguinte resultado.

... | coluna_1 | .... | colune_3 | contador

... | a | .... | b | 1

... | b | .... | c | 1

... | a | .... | c | 2

 

Entenderam?

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia após a consulta principal, fazer outras consultas para cada cláusula, porém com o count()

 

Exe.:

Select * from tbl where q1=x or q2=y or q3=z

 

Logo fará.

Select Count(*) from tbl Where q1=x;

Select Count(*) from tbl Where q2=y;

Select Count(*) from tbl Where q3=z;

 

Não sei se resolveria o problema, mas funcionaria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia após a consulta principal, fazer outras consultas para cada cláusula, porém com o count()

 

Exe.:

Select * from tbl where q1=x or q2=y or q3=z

 

Logo fará.

Select Count(*) from tbl Where q1=x;

Select Count(*) from tbl Where q2=y;

Select Count(*) from tbl Where q3=z;

 

Não sei se resolveria o problema, mas funcionaria.

 

Olá Jonatas, além de fazer consultas que deixaria o sistema mais lento, não resolveria, pelo fato de count() contar a quantidade de registros retornado e não a contagem de quantas condições no where foram true

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o count retornará a quantidade de registros, porém caso a cláusula where for true, logo contará os valores no quais tem interesse.

Imagina que tenho uma tbl com o registro banana e manga.
Seu selecionar com "Where fruta='banana' or fruta='manga'" o retorno será dois registros.

Se eu fizer o count para cada cláusula, terei um registro cada, totalizando dois registros.

 

Em relação ao sistema ficar mais lento é relativo, pois às vezes é melhor utilizar várias consultas simples do que uma complexa. isso é muito relativo, na melhor do que fazer testes de desempenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você está levando em consideração que em minha tabela eu não tenha valores repetidos. Vou usar o seu exemplo, se eu tiver 5 registros na tabela com o valor banana, logo o count() = 5 e não igual a 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise o uso do CASE.

 

Olá Motta, você poderia dar mais detalhe, pois andei lendo e pesquisando sobre isso, mas ainda não consegui chegar onde quero, olha o que fiz. Fiz de duas formas, uma usando CASE e outra usando IF

 

SELECT *, @total as total FROM `tabela` WHERE CASE WHEN id = 4 THEN (@total := 1 OR TRUE) ELSE FALSE END

 

e

 

SELECT *, @teste := 1 FROM `tabela` WHERE IF(id = 4, (@teste := @teste + 1 OR TRUE), FALSE)

 

Bom, ambos retorna o registro da minha tabela chamado "tabela" que tem o id = 4, mas ele não está somando o valor da variável teste + 1 que seria isso "@teste := @teste + 1". O problema agora é apenas esse, o valor de @teste não está sendo modificado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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