Ir para conteúdo

POWERED BY:

Arquivado

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

regina

Exibir diretores

Recommended Posts

Oi pessoal!

 

Estou em dúvida na exibição de diretores e cargos, tenho as seguintes tabelas:

Em uma tabela eu tenho as diretorias e seus mandatos, em outra eu tenhos os diretores. Preciso exibir todos os diretores de uma diretoria depois todos os da outra diretoria, e assim por diante.

--
-- Estrutura da tabela `tb_diretorias`
--

CREATE TABLE `tb_diretorias` (
  `diretoria_id` int(2) NOT NULL auto_increment,
  `diretoria` varchar(50) NOT NULL,
  `mandato` varchar(50) NOT NULL,
  `status` enum('ativo','inativo') NOT NULL,
  `criacao_data` datetime NOT NULL,
  `criacao_ope` int(2) NOT NULL,
  `edicao_data` datetime NOT NULL,
  `edicao_ope` int(2) NOT NULL,
  PRIMARY KEY  (`diretoria_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

-- --------------------------------------------------------

--
-- Estrutura da tabela `tb_diretoria_membros`
--

CREATE TABLE `tb_diretoria_membros` (
  `diretoria_membro_id` int(2) NOT NULL auto_increment,
  `diretoria_id` int(11) NOT NULL,
  `cargo` varchar(50) NOT NULL,
  `diretor` varchar(50) NOT NULL,
  `status` enum('ativo','inativo') NOT NULL,
  `criacao_data` datetime NOT NULL,
  `criacao_ope` int(2) NOT NULL,
  `edicao_data` datetime NOT NULL,
  `edicao_ope` int(2) NOT NULL,
  PRIMARY KEY  (`diretoria_membro_id`,`diretoria_id`),
  KEY `i1` (`diretoria_membro_id`),
  KEY `i2` (`diretoria_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Para exibir estou usando o seguinte script:

	$sql=mysql_query("SELECT * FROM tb_diretorias INNER JOIN tb_diretoria_membros ON(tb_diretorias.diretoria_id=tb_diretoria_membros.diretoria_id) WHERE tb_diretorias.status='ativo' GROUP BY tb_diretorias.diretoria_id ORDER BY tb_diretorias.diretoria_id ASC") or die (mysql_error());
?>
	  <dl>
<?php while($aux=mysql_fetch_array($sql)){ ?>
		<dt class="diretoria"><?php print $aux["cargo"]; ?></dt>
		<dd class="diretoria"><?php print $aux["diretor"]; ?></dd> 
<?php }?>
	  </dl>

Agradeço a quem puder ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vejo, você não precisa da parte "GROUP BY tb_diretorias.diretoria_id" na sua query.

 

E o seu problema parece ser apenas com exibição dos dados, correto?

 

Você quer montar algo destacando cada diretoria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso exibir todos os diretores de uma diretoria depois todos os da outra diretoria, e assim por diante.

 

Não conheço outra forma, senão fazer 2 loops encaixados:

o externo busca todas as diretorias, e passa um parâmetro para um loop interno listar os diretores dessa diretoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vejo, você não precisa da parte "GROUP BY tb_diretorias.diretoria_id" na sua query.

 

E o seu problema parece ser apenas com exibição dos dados, correto?

 

Você quer montar algo destacando cada diretoria?

 

Exato

 

Diretoria tal

presidente fulano de tal

vicê-presidente ciclano

 

e assim por diante

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso você controla na exibição com uma variável auxiliar, algo como:

 

<?php
	/* ... */
	$sql=mysql_query("
	SELECT  tb_diretorias.diretoria,
			tb_diretoria_membros.cargo,
			tb_diretoria_membros.diretor
	  FROM tb_diretorias
	    INNER JOIN tb_diretoria_membros
	      ON tb_diretoria_membros.diretoria_id = tb_diretorias.diretoria_id
	  WHERE tb_diretorias.status = 'ativo'
	") or die (mysql_error());

	$last_diretoria = NULL;
   
	while($aux=mysql_fetch_array($sql)){ 
		/* Quando mudar a diretoria, coloca o nome da mesma como título */
		if ($last_diretoria != $aux['diretoria']) {
			/* Se não for a primeira, fecha o <dl> */
			if (!is_null($last_diretoria)) {
				print '</dl>';
			}
			print '<h2>'. $aux['diretoria'] .'</h2>';
			print '<dl>';
		}
?>                
                <dt class="diretoria"><?php print $aux["cargo"]; ?></dt>
                <dd class="diretoria"><?php print $aux["diretor"]; ?></dd> 
<?php 
		$last_diretorio = $aux['diretoria'];
	}
?>
   </dl>

E de uma forma mais limpa, embora fazendo em dois processo, seria coletar separando em um array com a diretoria na chave, e então imprimindo num foreach.

 

A montagem seria como:

 

	$diretorias = array();
   
	while($aux=mysql_fetch_array($sql)){ 
		$diretorias[$aux['diretoria']][] = array($aux['cargo'], $aux['diretor']);
	}

O resto no foreach ficaria bem limpo, sem esses ifs que eu coloquei no primeiro exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E de uma forma mais limpa, embora fazendo em dois processo, seria coletar separando em um array com a diretoria na chave, e então imprimindo num foreach.

 

A montagem seria como:

 

	$diretorias = array();
   
	while($aux=mysql_fetch_array($sql)){ 
		$diretorias[$aux['diretoria']][] = array($aux['cargo'], $aux['diretor']);
	}

O resto no foreach ficaria bem limpo, sem esses ifs que eu coloquei no primeiro exemplo.

 

Muito Obrigada Eclesiastes, funcionou da maneira que precisava.

 

Mas...

Como seria usando o foreach?

 

Uma curiosidade:

Vi que você usa aspas simples, existe diferença em processamento ou é mais correta seu uso ao das aspas duplas?

 

Novamente muito obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

De nada. :)

 

Com foreach, seria assim:

 

        $diretorias = array();
   
        while ($aux = mysql_fetch_array($sql)) { 
                $diretorias[$aux['diretoria']][] = array($aux['cargo'], $aux['diretor']);
        }
        
        foreach ($diretorias as $titulo => $diretores) {
        	print '<h2>'. $titulo .'</h2>';
        	print '<dl>';
        	
        	foreach ($diretores as $info) {
        		print '<dt class="diretoria">'. $info[0] .'</dt>';
        		print '<dd class="diretoria">'. $info[1] .'</dd>';
        	}
        	
        	print '</dl>';
        }

Eu tenho o costume de usar aspas simples mesmo, em geral não faz muita diferença, mas há sim um diferente processamento do seu conteúdo. Como em aspas duplas pode haver a interpolação (o aparecimento do valor real das variáveis na string).

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.