Como Saber se o usuário é adulto ou criança em uma lista (Resolvido)

Estou com uma dificuldade que é simples mas não estou conseguindo fazer.

o cliente quer saber quantos adultos e quantos crianças tem no relatório, sendo que adulto é >= 13.

Fiz um select onde peguei todas as idades:

sc_lookup(dataset,"SELECT TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) as idade from membros c
WHERE celula_idcelula = ‘{idcelula}’ ");

if({dataset}[0][0] >= 13){

{idade} = ‘Adulto’;

else{
{idade} = ‘Crianca’;

}

Nesse dataset eu tenho todas as idades, mas como mostro apenas a quantidade de adultos?

Att,

Crie 2 campos virtuais:
Qtde_Adultos = Número (Qtde Adultos)
Qtde_Criancas = Número (Qtde Crianças)

sc_lookup(dataset,"SELECT TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) as idade from membros c
WHERE celula_idcelula = ‘{idcelula}’ ");

if({dataset}[0][0] >= 13){
{idade} = ‘Adulto’;
{Qtde_Adultos}=1;
else{
{idade} = ‘Crianca’;
{Qtde_Criancas}=1;
}

Ai só entrar em Totalização na Consulta e selecionar os 2 campos como (soma).
{Qtde_Adultos}
{Qtde_Criancas}

Em primeiro lugar agradecer pela sua ajuda Jailton, mas fiz essa implementação e não veio a soma.

Seguinte tem um relatório que já está armazenado no dataset com as seguintes idades:

69,55,37,16, 12

No relatório teria que apacerecer:

Qtd_adultos: 4

Qtd_criancas: 1

Obs:Será que não tinha que fazer outra query select COUNT contando os registros se fosse adulto e se fosse criança?

Neste exemplo você teria que Colocar estre código no OnRecord da GRID:
sc_lookup(dataset,"SELECT TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) as idade from membros c
WHERE celula_idcelula = ‘{idcelula}’ ");

if({dataset}[0][0] >= 13){
{idade} = ‘Adulto’;
{Qtde_Adultos}=1;
else{
{idade} = ‘Crianca’;
{Qtde_Criancas}=1;
}

E criar os campos virtuais numéricos:
{Qtde_Adultos}
{Qtde_Criancas}

Ai só entrar em Totalização na Consulta e selecionar os 2 campos como (soma).
{Qtde_Adultos}
{Qtde_Criancas}

Depois só selecionar eles em Totalização.

Jailton,

Fiz o procedimento conforme vc solicitou, criei uma rotina PHP e chamei no evento on record da consulta, criei os 2 campos virtuais, em totalização selecionei os 2 campos, no entanto, aparece no campo qtd_criancas 1 nos 2 registros totalizando 2 e no campo qtd_adulto não aparece nada. Mas no banco tem Qtd_adultos: 4 e Qtd_criancas: 1

Att,

Seu dataset esta errado, troca por este código:

/* Macro sc_lookup */

$sql="
SELECT
TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) AS Idade
FROM
membros c
WHERE
celula_idcelula = ‘{idcelula}’
";

sc_lookup(chk_idade, $sql);

if ({chk_idade[0][0]}>= 13) {
{idade} = ‘Adulto’;
{Qtde_Adultos}=1;
} else {
{idade} = ‘Crianca’;
{Qtde_Criancas}=1;
}

Agora ele caiu no laço dos adultos, mas ele continua não vindo a quantidade de adultos que é 4 adultos, está vindo na grid o total=1

Faz um debug assim:

/* Macro sc_lookup */

$sql="
SELECT
TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) AS Idade
FROM
membros c
WHERE
celula_idcelula = ‘{idcelula}’
";

sc_lookup(chk_idade, $sql);

{idade} = {chk_idade[0][0]};

Assim você vai ver que valor Qtde de Idade sua Query SQL esta retornando, ai só corrigir ela, veja se este campo ‘{idcelula}’ esta sendo listado e qual o valor dele também.

1 - Está vindo a primeira idade do registro que é 69 anos.

2 - Essa query WHERE
celula_idcelula = ‘{idcelula}’ é para filtrar somente os membros do setor X.

E os demais registros? listados devem estar aparece a idade também? em cada linha correspondente.

1 - Os demais registros não vieram no debug

2 - Todos os registros vem quando seto um comando select direto no campo:

SELECT
TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) AS Idade
FROM
membros c
WHERE
celula_idcelula = ‘{idcelula}’

ae vem todas as idades

Essa rotina tem quer ser colocada no OnRecord de uma GRID consulta, não no SELECT do campo:

/* Macro sc_lookup */

$sql="
SELECT
TIMESTAMPDIFF(YEAR, c.dataNascimento, CURDATE()) AS Idade
FROM
membros c
WHERE
celula_idcelula = ‘{idcelula}’
";

sc_lookup(chk_idade, $sql);

if ({chk_idade[0][0]}>= 13) {
{idade} = ‘Adulto’;
{Qtde_Adultos}=1;
} else {
{idade} = ‘Crianca’;
{Qtde_Criancas}=1;
}

Eu já tinha feito exatamente como está no print, a questão direto do campo fazendo a query era para testar. Enfim não retorna os resultados corretos.

Danyx te enviei uma MP com Debug.

Agradecer ao Jailton pela força. Segue a query:

{Qtde_Adultos}=0;
{Qtde_Criancas}=0;

/* Macro sc_lookup */

$sql="
SELECT
COUNT(*)
FROM
membros
WHERE
celula_idcelula = ‘{idcelula}’ AND TIMESTAMPDIFF(YEAR,
dataNascimento, CURDATE())>=13
";

sc_lookup(chk_idade, $sql);

{Qtde_Adultos}={chk_idade[0][0]};

/* Macro sc_lookup */

$sql="
SELECT
COUNT(*)
FROM
membros
WHERE
celula_idcelula = ‘{idcelula}’ AND TIMESTAMPDIFF(YEAR,
dataNascimento, CURDATE())<13
";

sc_lookup(chk_idade, $sql);

{Qtde_Criancas}={chk_idade[0][0]};