Ir para conteúdo

POWERED BY:

Arquivado

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

SnakeX

[Resolvido] LEFT JOIN problema

Recommended Posts

Boas...

 

Eu tenho esta consulta em MySQLi

$query = array();
	$query[] = "SELECT `c`.*, ";
	
	$query[] = "COUNT(`sa`.`id`) as `contas_alojamento`, ";
	$query[] = "COUNT(`sr`.`id`) as `contas_revenda` ";
	
	
	$query[] = "FROM `clientes` as `c`";
	
	// Contas de Alojamento
	$query[] = "LEFT JOIN `servicos_alojamento` as `sa` ON `sa`.`cid`='" . $id . "' AND `sa`.`revenda`='0'";
	
	// Contas de Revenda
	$query[] = "LEFT JOIN `servicos_alojamento` as `sr` ON `sr`.`cid`='" . $id . "' AND `sr`.`revenda`='1'";

	$query[] = " WHERE `c`.`id`='" . $id . "'";

 

Ele funciona, mas o total das 'contas_alojamento' e 'contas_revenda' é sempre igual, ou seja, neste caso tenho 3 registos:

ID | CID | Revenda

01 | 001 | 0

02 | 001 | 1

03 | 001 | 0

 

Portanto ele deveria retornar:

'contas_alojamento' = 2

'contas_revenda' = 1

mas ele assume sempre 2 no contas_revenda

 

O que me está a faltar na consulta?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentei também, GROUP BY `c`.`id` e fica igual =\

Agora estou com pouco tempo, mas vou depois tentar fazer um SELEFT dentro do LEFT JOIN, tipo LEFT JOIN (SELECT COUNT() FROM tabela WHERE x=y) para ver se fica a funcionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

então faça com INNER JOIN ,... e group by

 

$query = array();
        $query[] = "SELECT `c`.*, ";
        
        $query[] = "COUNT(`sa`.`id`) as `contas_alojamento`, ";
        $query[] = "COUNT(`sr`.`id`) as `contas_revenda` ";
        
        
        $query[] = "FROM `clientes` as `c`";
        
        // Contas de Alojamento
        $query[] = "INNER JOIN `servicos_alojamento` as `sa` ON `sa`.`cid`='" . $id . "' AND `sa`.`revenda`='0'";
        
        // Contas de Revenda
        $query[] = "INNER JOIN `servicos_alojamento` as `sr` ON `sr`.`cid`='" . $id . "' AND `sr`.`revenda`='1'";

        $query[] = " WHERE `c`.`id`='" . $id . "' group by `c`.`id`, `sr`.`revenda`";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente não funcionou =\

 

 

Edit:

 

Resolvi fazendo da maneira que mencionei:

$query[] = "SELECT  `c`.*,";
	$query[] = "( SELECT  COUNT(*) FROM `servicos_alojamento` as `sa` WHERE `sa`.`revenda`='0') AS 'contas_alojamento',";
	$query[] = "( SELECT  COUNT(*) FROM `servicos_alojamento` as `sr` WHERE `sr`.`revenda`='1') AS 'contas_revenda'";
	$query[] = "FROM `clientes` as `c`";
	$query[] = "WHERE  `c`.`id`= '" . $id . "'";

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.