Ir para conteúdo

POWERED BY:

Arquivado

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

KUROL3

Facil mas é difícil, GROUP By

Recommended Posts

Olá estou com uma dúvida que..... quando vi achei que era facil, mas quando fui fazer deu um nó.. mas nó cego srsrsr...

 

vou dar um exemplo...

estou criando um sisteminha para gerenciar cobrança de domínio.

 

Bom quando vence dois domínios juntos ou no período de 30 dias eu agrupo pleo cliente até ai beleza....

Quando eu gero o boleto para esses dois domínios, "um único boleto para 2 domínios", na tabela de boleto eu gravo "id_dominios_renovacao = '125,128'" os dois id dois domínios a serem renovados.

até ai maravilha rodando perfeito...

Agora hj por conhecidência havia um boleto nessa situação e o cliente pediu para registrar mais 2, quando eu cliquei para ver os domínios apareceu a opção de gerar os boletos novamente para os 4 domínios.

 

eu precisaria agrupar pelo "id_dominios_renovacao" os ids na clientes_dominios: tipo

 

tabela clientes_dominios (suponhamos que todos 2 vence esse mes eu ja gerei o boleto e o restante o cliente pediu depois de gerar o boleto

 

id dominio

 

10 dominio1

11 dominio2

12 dominio4

13 dominio5

14 dominio6

13 dominio7

 

tabela de boleto

 

id id_dominios_renovacao

220 - '10,11'

 

o group by teria que ficar o id 10,11 em uma mesma coluna

 

 

tabela de dominios

 

CREATE TABLE `clientes_dominios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_cliente` int(11) NOT NULL,
  `id_usuario` int(11) NOT NULL,
  `dominio` varchar(50) COLLATE latin1_general_ci NOT NULL,
  `flag_propriedades` smallint(1) NOT NULL COMMENT '0 - não cobrar não é kurole - 1 é kurole tem que cobrar',
  `data_expiracao` date NOT NULL,
  `data_criacao` date NOT NULL,
  `data` datetime NOT NULL,
  `flag_excluido` smallint(1) NOT NULL,
  `ip` varchar(16) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `dominio` (`dominio`),
  KEY `id_cliente` (`id_cliente`),
  KEY `id_usuario` (`id_usuario`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=266 ;

aguardo

marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que não esta dando certo está assim....

 

SELECT 
							CD.id,
							CD.data_expiracao,
							CD.id_cliente,
							date_format(CD.data_expiracao, '%d/%m/%Y') as data_expiracao_OK,
							date_format(CD.data_criacao, '%d/%m/%Y') as data_criacao_OK,
							COUNT(CD.dominio) as qtd_dominio,
							GROUP_CONCAT(CD.id) as id_dominios,
							clientes.nome_razao,
							clientes.telefone,
							clientes.id_categoria,
							clientes.id_cedente,
							clientes.flag_taxa_boleto,
							boleto_gerado.id as existe_boleto,
							date_format(boleto_gerado.vencimento_data, '%d/%m/%Y') as vencimento_data_OK
						FROM 
							clientes_dominios CD
							INNER JOIN clientes ON clientes.id = CD.id_cliente
							LEFT JOIN boleto_gerado ON CD.id IN (boleto_gerado.id_dominio_renovacao) /*AND boleto_gerado.pago != 'sim' nao é necessario essa informaçao pq na baixa atualiza  data de expiraçao */
						WHERE 
							CD.flag_propriedades = 1 AND 
							CD.data_expiracao <= DATE_ADD(now(), interval 1 month) AND 
							CD.data_expiracao <> '0000-00-00' AND
							CD.flag_excluido != 1
						GROUP BY 
							CD.id_cliente
						ORDER BY 
							CD.data_expiracao 
						ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente :


 

SELECT

CD.id,

CD.data_expiracao,

CD.id_cliente,

date_format(CD.data_expiracao, '%d/%m/%Y') as data_expiracao_OK,

date_format(CD.data_criacao, '%d/%m/%Y') as data_criacao_OK,

GROUP_CONCAT(CD.id) as id_dominios,

clientes.nome_razao,

clientes.telefone,

clientes.id_categoria,

clientes.id_cedente,

clientes.flag_taxa_boleto,

boleto_gerado.id as existe_boleto,

date_format(boleto_gerado.vencimento_data, '%d/%m/%Y') as vencimento_data_OK,

COUNT(CD.dominio) as qtd_dominio

FROM

clientes_dominios CD

INNER JOIN clientes ON clientes.id = CD.id_cliente

LEFT JOIN boleto_gerado ON CD.id IN (boleto_gerado.id_dominio_renovacao) /*AND boleto_gerado.pago != 'sim' nao é necessario essa informaçao pq na baixa atualiza data de expiraçao */

WHERE

CD.flag_propriedades = 1 AND

CD.data_expiracao <= DATE_ADD(now(), interval 1 month) AND

CD.data_expiracao <> '0000-00-00' AND

CD.flag_excluido != 1

GROUP BY

CD.id,

CD.data_expiracao,

CD.id_cliente,

date_format(CD.data_expiracao, '%d/%m/%Y'),

date_format(CD.data_criacao, '%d/%m/%Y'),

GROUP_CONCAT(CD.id),

clientes.nome_razao,

clientes.telefone,

clientes.id_categoria,

clientes.id_cedente,

clientes.flag_taxa_boleto,

boleto_gerado.id,

date_format(boleto_gerado.vencimento_data, '%d/%m/%Y')

ORDER BY

CD.data_expiracao

ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu esse erro:

 

#1111 - Invalid use of group function

 

 

Tirei a group_concat do group by ai não funcionow.. se não tiver idéia eu dou uns print da tela...

 

marco

 

heheheheh consegui...... assim... vou postar aqui tenho ctz.. que vai ajudar alguem tb.. srrsrs

 

alterei essa linha no left join

LEFT JOIN boleto_gerado ON CD.id IN (boleto_gerado.id_dominio_renovacao)

 

Por

LEFT JOIN boleto_gerado ON FIND_IN_SET(CD.id, boleto_gerado.id_dominio_renovacao) /*aqui ele encontra os ids que estao no mesmo campo tipo 102,135,132*/ depois so agrupei em baixo ficou perfeito...

 

 

SELECT 
							CD.id,
							CD.data_expiracao,
							CD.id_cliente,
							date_format(CD.data_expiracao, '%d/%m/%Y') as data_expiracao_OK,
							date_format(CD.data_criacao, '%d/%m/%Y') as data_criacao_OK,
							COUNT(CD.dominio) as qtd_dominio,
							GROUP_CONCAT(CD.id) as id_dominios,
							clientes.nome_razao,
							clientes.telefone,
							clientes.id_categoria,
							clientes.id_cedente,
							clientes.flag_taxa_boleto,
							boleto_gerado.id as existe_boleto,
							date_format(boleto_gerado.vencimento_data, '%d/%m/%Y') as vencimento_data_OK
						FROM 
							clientes_dominios CD
							INNER JOIN clientes ON clientes.id = CD.id_cliente
							LEFT JOIN boleto_gerado ON FIND_IN_SET(CD.id, boleto_gerado.id_dominio_renovacao) /*AND boleto_gerado.pago != 'sim' nao é necessario essa informaçao pq na baixa atualiza  data de expiraçao */
						WHERE 
							CD.flag_propriedades = 1 AND 
							CD.data_expiracao <= DATE_ADD(now(), interval 1 month) AND 
							CD.data_expiracao <> '0000-00-00' AND
							CD.flag_excluido != 1
						GROUP BY 
							CD.id_cliente, boleto_gerado.id_dominio_renovacao
						ORDER BY 
							CD.data_expiracao 
						ASC

 

abraço..

kurole

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.