Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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
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.
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
Pesquise o uso do CASE.
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.
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á.
Não sei se resolveria o problema, mas funcionaria.