Por: Ruben Zevallos Jr.
Data de Publicação: 16 de abril de 2007
Com base no PaiCom base no AvôNeste exemplo poderemos ver 2 exemplos, sendo que o primeiro está errado e a solução foi acertada na 2a ZTag
<ZTagSQL(10).HomeNoticias."PG.pagNome = 'Pensadores' AND PG.pagReferencia = 10 AND Pa.pagAtivo = 1"."CASE WHEN Pa.pagDataReferencia is null THEN Pa.pagInclusao ELSE Pa.pagDataReferencia END DESC, Pa.pagCodigo DESC">Nesta ZTag, eu tenho o objetivo de ter todos os netos de um determinado nó... mas, está com problema mesmo, pois ele não consegue processar a integração entre o Avô e o Neto.
O Publicador não consegue processar devido a essa falta de inteligação entre o Avô e o Filho.
SQL resultado da execuçãoSELECT TOP 10 Pa.pagCodigo AS PapagCodigo
, PapagDataReferenciaDayFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('00' + CONVERT(varchar(2), Day(Pa.pagInclusao)), 2)
ELSE RIGHT('00' + CONVERT(varchar(2), Day(Pa.pagDataReferencia)), 2)
END
, PapagDataReferenciaMonthFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('00' + CONVERT(varchar(2), Month(Pa.pagInclusao)), 2)
ELSE RIGHT('00' + CONVERT(varchar(2), Month(Pa.pagDataReferencia)), 2)
END
, PapagDataReferenciaYearFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('0000' + CONVERT(varchar(4), Year(Pa.pagInclusao)), 4)
ELSE RIGHT('0000' + CONVERT(varchar(4), Year(Pa.pagDataReferencia)), 4)
END
,Pa.pagTipoAlternativo AS PapagTipoAlternativo
,Pa.pagAlternativo AS PapagAlternativo
, PapagTituloFlutuante = CASE
WHEN Pa.pagTituloFlutuante IS NULL OR Pa.pagTituloFlutuante !> '' THEN Pa.pagTitulo
ELSE Pa.pagTituloFlutuante
END
,Pa.pagTitulo AS PapagTitulo
,Pa.pagResumo AS PapagResumo
FROM pubPaginas Pa
LEFT JOIN pubPaginas PG ON PG.pagCodigo = PF.pagPai AND PG.pagAtivo = 1
WHERE PG.pagNome = 'Pensadores' AND PG.pagReferencia = 10 AND Pa.pagAtivo = 1
ORDER BY CASE WHEN Pa.pagDataReferencia is null THEN Pa.pagInclusao ELSE Pa.pagDataReferencia END DESC, Pa.pagCodigo DESC
<ZTagSQL(10).HomeNoticias."PG.pagNome = 'Pensadores' AND PG.pagReferencia = 10 AND PF.pagPai = PG.pagCodigo AND Pa.pagPai = PF.pagCodigo AND Pa.pagAtivo = 1"."CASE WHEN Pa.pagDataReferencia is null THEN Pa.pagInclusao ELSE Pa.pagDataReferencia END DESC, Pa.pagCodigo DESC">Esta é a ZTag correta, onde eu inclui as referências de ligação entre o Avô e os netos, passando pelo Pai.
Solução:AND PF.pagPai = PG.pagCodigo <-- Crio o vínculo entre o Pai e o Avô
AND Pa.pagPai = PF.pagCodigo <-- Crio o vínculo entre o Pai e o os filhos
SQL resultado da execuçãoSELECT TOP 10 Pa.pagCodigo AS PapagCodigo
, PapagDataReferenciaDayFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('00' + CONVERT(varchar(2), Day(Pa.pagInclusao)), 2)
ELSE RIGHT('00' + CONVERT(varchar(2), Day(Pa.pagDataReferencia)), 2)
END
, PapagDataReferenciaMonthFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('00' + CONVERT(varchar(2), Month(Pa.pagInclusao)), 2)
ELSE RIGHT('00' + CONVERT(varchar(2), Month(Pa.pagDataReferencia)), 2)
END
, PapagDataReferenciaYearFull = CASE
WHEN Pa.pagDataReferencia IS NULL THEN RIGHT('0000' + CONVERT(varchar(4), Year(Pa.pagInclusao)), 4)
ELSE RIGHT('0000' + CONVERT(varchar(4), Year(Pa.pagDataReferencia)), 4)
END
,Pa.pagTipoAlternativo AS PapagTipoAlternativo
,Pa.pagAlternativo AS PapagAlternativo
, PapagTituloFlutuante = CASE
WHEN Pa.pagTituloFlutuante IS NULL OR Pa.pagTituloFlutuante !> '' THEN Pa.pagTitulo
ELSE Pa.pagTituloFlutuante
END
,Pa.pagTitulo AS PapagTitulo
,Pa.pagResumo AS PapagResumo
FROM pubPaginas Pa
LEFT JOIN pubPaginas PF ON PF.pagCodigo = Pa.pagPai AND PF.pagAtivo = 1
WHERE Pa.pagAtivo = 1
AND Pa.pagReferencia = 8
ORDER BY CASE
WHEN Pa.pagDataReferencia is null THEN Pa.pagInclusao
ELSE Pa.pagDataReferencia
END
DESC, Pa.pagCodigo DESC, PF.pagNome, Pa.pagTitulo
- Texto Anterior:
- Ligação entre o Avô e Netos - Ligação entre o Avô e Netos
- Próximo texto:
- Ligação entre o Avô e Netos - Ligação entre o Avô e Netos
- Índice da Edição - Dicas de Uso