<?phpSalve o arquivo com o nome de join.php
// importa as configurações padrão
require_once 'config.php';
// importa as classes de categoria e noticia
Lumine::import('Categoria','Noticia');
// inicia um objeto de categoria
$categoria = new Categoria();
// inicia um objeto de noticia
$noticia = new Noticia();
////////////////////////////////////////////////////////
// agora, vamos fazer a união
////////////////////////////////////////////////////////
// mudamos o alias de noticia
$noticia->alias('n')
// unimos com categoria, colocando o alias c
->join($categoria,'inner','c')
// selecionamos os campos desejados
->select('n.codnoticia, n.titulo, n.data_cadastro, n.categoria, c.nome as nomecategoria')
// ordenamos pela data de cadatro da notícia decrescente
->order('n.data_cadastro desc')
// efetuamos a consulta
->find();
// para cada resultado encontrado
while( $noticia->fetch() )
{
// mostramos o codigo da noticia, titulo e categoria
echo $noticia->codnoticia . ' - ' .
$noticia->titulo . ' - ' .
$noticia->nomecategoria . '<br>';
}
// mudamos o alias de categoriaSalve o arquivo com o nome de categorias.phpi
$categoria->alias('c')
// une com noticias no modo LEFT JOIN
->join($noticia, 'left', 'n')
// seleciona o codigo da categoria, nome e a quantidade de notícias
->select('c.codcategoria, c.nome, COUNT(n.codnoticia) AS total_noticias')
// ordena pelo nome da categoria
->order('c.nome ASC')
// agrupa pelo código da categoria
->group('c.codcategoria')
// efetua a consulta
->find();
// para cada resultado encontrado
while( $categoria->fetch() )
{
// mostramos o codigo da categoria, nome da categoria e quantidade de noticias
echo $categoria->codcategoria . ' - ' .
$categoria->nome . ' - ' .
$categoria->total_noticias . '<br>';
}
// recupera a franquia atual do sistema (NÃO FAZ PARTE DO PACOTE DO Lumine)
$franquia = $sis->getFranquia();
// instancia as classes necessárias
$imovel = new Imovel;
$tipo = new Tipo_imovel;
$cidade = new Cidade;
$bairro = new Bairro;
$cliente = new Cliente;
$foto = new Clienteimovelfoto;
$cat = new Categoria();
//////////////////////////////////////////////////
// destaques da esquerda (ALTO PADRAO)
////////////////////////////////////////////////
$imovel->alias('i') // muda o alias de imovel
->join($tipo,'inner','t') // une com o tipo de imovel com alias t
->join($cidade,'inner','c') // une com cidade com alias c
->join($bairro,'inner','b') // une com bairro e alias b
->join($cliente->alias('cl') // une com cliente com alias cl E cliente une com...
->join($franquia,'inner','fr') // ... a franquia que ele pertence com alias fr
)
->join($foto,'left','f') // une com a foto do imovel (LEFT) e alias f
// pega todos os dados de imovel
->selectAs()
// seleciona mais alguns dados
->select('b.nome as nomebairro,t.nome as nometipo,c.nome as nomecidade,f.arquivo, fr.permalink as nomefranquia')
// limpa todas as condições WHERE que existirem (se existirem)
->where()
// somente clientes ativos que não tenham expirado e imóveis que estejam ativos
->where('cl.ativo = 1 and cl.dataexpira >= ? and i.ativo = 1', time())
// somente se a franquia está ativa e que o codigo seja da franquia selecionada
->where('fr.ativo = 1 and fr.idfranquia = ?', $franquia->idfranquia)
// somente imoveis marcados como "alto padrão"
->where('i.altopadrao = 1')
// ordena randomicamente (pega a função do banco)
->order( $imovel->_getConnection()->random() )
// limita em 3 registros
->limit( 3 )
// agrupa pelo id do imovel
->group('i.idimovel')
// efetua a consulta
->find();
Este "pequeno" trecho irá gerar a seguinte consulta:
SELECT i.idimovel as idimovel, i.idbairro as bairro, i.idcidade as cidade, i.idtipo as tipo_imovel, i.idlocador as clientelocador, i.idcliente as cliente, i.nome as nome, i.logradouro as logradouro, i.numero as numero, i.descricao as descricao, i.qtd_quarto as qtd_quarto, i.qtd_suite as qtd_suite, i.qtd_sala as qtd_sala, i.qtd_cozinha as qtd_cozinha, i.terreno_largura as terreno_largura, i.terreno_comprimento as terreno_comprimento, i.area_construida as area_construida, i.venda as venda, i.locacao as locacao, i.ativo as ativo, i.destaque as destaque, i.valor_aluguel as valor_aluguel, i.valor_venda as valor_venda, i.data_cadastro as data_cadastro, i.areautil as areautil, i.areatotal as areatotal, i.idcategoria as categoria, i.altopadrao as altopadrao, b.nome as nomebairro, t.nome as nometipo, c.nome as nomecidade, f.arquivo, fr.permalink as nomefranquia
FROM imo_imovel i
INNER JOIN imo_tipo_imovel t ON t.idtipo = i.idtipo
INNER JOIN imo_cidade c ON c.idcidade = i.idcidade
INNER JOIN imo_bairro b ON b.idbairro = i.idbairro
INNER JOIN imo_cliente cl ON cl.idcliente = i.idcliente
INNER JOIN imo_franquia fr ON fr.idfranquia = cl.idfranquia
LEFT JOIN imo_clienteimovelfoto f ON f.idimovel = i.idimovel
WHERE cl.ativo = 1 and cl.dataexpira >= '2008-04-29' and i.ativo = 1 AND fr.ativo = 1 and fr.idfranquia = 1 AND i.altopadrao = 1
GROUP BY i.idimovel
ORDER BY rand()
LIMIT 3
@braços e fiquem com Deus!