Ir para conteúdo

POWERED BY:

Arquivado

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

pedrovisk

Agrupamento de Registros

Recommended Posts

Olá Pessoal!

 

Sou novo em PHP e estou desenvolvendo uma página onde liste todos os registro de duas tabelas (Colaborador e Departamento). Segue a consulta que gerei:

select `colaborador`.`ID` AS `IdColab`, 
`colaborador`.`NomeBase` AS `NomeBase`,
        `colaborador`.`UsuarioBase` AS `UsuarioBase`,
        `colaborador`.`IDDepartamento` AS `IDDepartamento`,
        `departamento`.`ID`,
        `departamento`.`Departamento` AS `Departamento`,
from (`colaborador` join `departamento`) where (`colaborador`.`IDDepartamento` = `departamento`.`ID`) 
group by `departamento`.`ID`

Esta página deverá exibir os Colaboradores agrupados por Departamento, por exemplo:

 

Departamento A

- Colaborador 1

- Colaborador 2

- Colaborador 3

 

Departamento B

- Colaborador 4

- Colaborador 5

- Colaborador 6

 

A consulta está trazendo o resultado esperado, mas eu não sei como montar esta estrutura de repetição que exiba o Nome do Departamento no cabeçalho da TABELA e na linha seguinte, liste os Colaboradores deste Departamento.

 

Alguém já fez algo semelhante?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo,

 

O que é preciso é listas TODOS os Colaboradores de CADA Departamento. Veja um exemplo da tabela que criei https://docs.google.com/file/d/0B9ADjnhrddtnN0hLNFRra0NkbmM/edit?usp=sharing

 

 

Obrigado!

 

Aqui vai o HTML dela:

 

 

 

<table width="570" border="1" cellspacing="0" cellpadding="1">
  <tr>
    <td colspan="3"><strong>Departamento: </strong>Financeiro</td>
  </tr>
  <tr align="center">
    <td><strong>Colaborador</strong></td>
    <td><strong>Nome Base</strong></td>
    <td><strong>Usuário Base</strong></td>
  </tr>
  <tr>
    <td>Paulo</td>
    <td>Paulo</td>
    <td>paulo</td>
  </tr>
  <tr>
    <td>Carlos</td>
    <td>Carlos</td>
    <td>carlos</td>
  </tr>
  <tr>
    <td colspan="3"> </td>
  </tr>
  <tr>
    <td colspan="3"><strong>Departamento: </strong>Comercial</td>
  </tr>
  <tr align="center">
    <td><strong>Colaborador</strong></td>
    <td><strong>Nome Base</strong></td>
    <td><strong>Usuário Base</strong></td>
  </tr>
  <tr>
    <td>Henrique</td>
    <td>Henrique</td>
    <td>henrique</td>
  </tr>
  <tr>
    <td>Mari</td>
    <td>Mari</td>
    <td>mari</td>
  </tr>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, nao sou bom em php, me arisco, mas acho que uma solução seria assim no banco de dados, depois voce junta com um script

CREATE TABLE IF NOT EXISTS `departamentos` (
  `id_departamentos` int(11) NOT NULL AUTO_INCREMENT,
  `id_colaborador` int(11) NOT NULL,
  `departamento` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id_departamentos`),
  KEY `id_artistas` (`id_departamentos`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `departamentos_colaborador` (
  `id_colaborador` int(11) NOT NULL AUTO_INCREMENT,
  `colaborador` varchar(255) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`id_categoria`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo,

 

O Banco de dados está ok e trazendo o que solicitei. O que preciso de ajuda é no PHP para exibir conforme necessito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, aqui no meu eu uso assim

<?

if ($_GET['id']>0) {
	$busca = " AND id_noticia=".(int)$_GET['id'];
} else if ($_GET['categoria']>0) {
	$busca = " AND noticias.id_categoria=".(int)$_GET['categoria'];
}

$i=0;
$SQL = " SELECT
		noticias.*,
		DATE_FORMAT(noticias.data,'%d/%m/%Y')  as data1 ,
		noticias_categorias.*
	FROM 
		noticias
		INNER JOIN noticias_categorias ON (noticias_categorias.id_categoria = noticias.id_categoria)
	WHERE 1
		".$busca."
	ORDER BY 
		data DESC
		";
	$Lista = new Consulta($SQL,20,$PGATUAL);
	while ($linha = db_lista($Lista->consulta)) { $i++;
	
?>

para mim listar a noticia a sua categoria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou quase chegando lá, veja como ficou agora:

 

Obs.: Preciso apenas colocar uma linha vazia entre um cabeçalho e outro (Departamento)

 

<?php
$con = mysql_connect('localhost', 'root', '111');
mysql_select_db('GI', $con);




$sql = "SELECT * FROM Departamento";
$query = mysql_query( $sql )or die( mysql_error() );


//echo $sql;
?>
<table width="570" border="0" cellspacing="1" cellpadding="2">
  <?php
while ($linha1 = mysql_fetch_assoc($query))
{
?>
  <tr bgcolor="#FF9933">
    <td colspan="3"><strong>Departamento: </strong><?php echo $linha1['Departamento']?></td>
  </tr>
  <tr align="center" bgcolor="#F2F2F2">
    <td><strong>Colaborador</strong></td>
    <td><strong>Nome Base</strong></td>
    <td><strong>Usuário Base</strong></td>
  </tr>
  <?php


$sql2 = "
SELECT * FROM `Colaborador` 
INNER JOIN `Departamento` 
ON Colaborador.IDDepartamento = Departamento.ID 
WHERE Colaborador.IDDepartamento = {$linha1['ID']}
";


//echo $sql2;
$query2 = mysql_query( $sql2 )or die( mysql_error() );
while ( $dados = mysql_fetch_assoc( $query2 ) ) 
{
?>
  <tr>
    <td><?php echo $dados['NomeBase'] ?></td>
    <td><?php echo $dados['UsuarioBase'] ?></td>
    <td><?php echo $dados['Colaborador.ID'] ?></td>
  </tr>
  <?php
}
}
?>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo,

 

Você saber como colocar uma linha do cor e a outra com OUTRA COR?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um script que faz isso, vai aqui uma parte dele, acho que você consegue tirar oque você quer.

<?
$i=0;
while ($dados = db_lista($consulta_dados)) {
if($i % 2 == 0){
?>
<div id="cor1">
 </div>
<?
else{
?>
<div id="cor2">
 </div>
 <?php
}
$i++;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo. Ficou o conteúdo do DEPARTAMENTO de uma cor e o conteúdo de outro departamento de outra cor. O que preciso é que as LINHAS DO DEPARTAMENTO tenham cores distintas, tipo: cor sim e cor não.

 

 

 

<table width="600" border="0" cellpadding="2" cellspacing="1" class="Borda">
<?php
  while ($linha1 = mysql_fetch_assoc($rs))
  {
?>
  <tr class="Titulo">
    <td colspan="3"><strong>Departamento:</strong> <?php echo trim($linha1['Departamento'])?></td>
  </tr>
  <tr align="center" class="Cabecalho">
    <td>Colaborador</td>
    <td>e-Mail</td>
    <td>Senha</td>
  </tr>
  
<?php
$sql2 = "
SELECT * FROM `Colaborador` 
INNER JOIN `Departamento` 
ON Colaborador.IDDepartamento = Departamento.ID 
WHERE Colaborador.IDDepartamento = {$linha1['ID']}
";


$rs2 = mysql_query( $sql2 )or die( mysql_error() );
//$num = 0;
$num = $num + 1;
if($num % 2 == 0) { $cor = '#EAF9FF'; } else { $cor = '#FFFFFF'; }
while ( $dados = mysql_fetch_assoc( $rs2 ) ) 
{
?>


<tr class="Linha" bgcolor="<?php echo $cor ?>">
  <td><?php echo trim($dados['NomeBase']) ?></td>
  <td><?php echo trim($dados['email']) ?></td>
  <td><?php echo trim($dados['Senha']) ?></td>
</tr>


<?php
}
}
?>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz assim e não deu certo:

 

 

 

$rs2 = mysql_query( $sql2 )or die( mysql_error() );
$I = 0;
//$num = $num + 1;
if($I % 2 == 0) { $cor = '#EAF9FF'; } else { $cor = '#FFFFFF'; }
while ( $dados = mysql_fetch_assoc( $rs2 ) ) 
{
?>


<tr class="Linha" bgcolor="<?php echo $cor ?>">
  <td><?php echo trim($dados['NomeBase']) ?></td>
  <td><?php echo trim($dados['email']) ?></td>
  <td><?php echo trim($dados['Senha']) ?></td>
</tr>


<?php
}
$I++;
}
?>

 



RESOLVI! FICOU ASSIM:

 

 

 

$rs2 = mysql_query( $sql2 )or die( mysql_error() );
$i = 0;
while ( $dados = mysql_fetch_assoc( $rs2 ) ) {
if($i % 2 == 0){
$cor = '#F2F2F2';
}else{
$cor = '#ffffff';
}


$i++;
?>


<tr class="Linha" bgcolor="<?php echo $cor ?>">
  <td><?php echo trim($dados['NomeBase']) ?></td>
  <td><?php echo trim($dados['email']) ?></td>
  <td><?php echo trim($dados['Senha']) ?></td>
</tr>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não so muito com em msylq, mas acho que é tipo assim, testa ai para ver!!

<table width="600" border="0" cellpadding="2" cellspacing="1" class="Borda">
<?php
		$i=0;
			while ($linha1 = mysql_fetch_assoc($rs))
			if($i % 2 == 0)
{
?>
  <tr class="Titulo">
    <td colspan="3"><strong>Departamento:</strong> <?php echo trim($linha1['Departamento'])?></td>
  </tr>
  <tr align="center" bgcolor="#c4c4c4" class="Cabecalho">
    <td>Colaborador</td>
    <td>e-Mail</td>
    <td>Senha</td>
  </tr>
<?
	else{
?>
<?php
$sql2 = "
SELECT * FROM `Colaborador` 
INNER JOIN `Departamento` 
ON Colaborador.IDDepartamento = Departamento.ID 
WHERE Colaborador.IDDepartamento = {$linha1['ID']}
";
//echo $sql2;
		$query2 = mysql_query( $sql2 )or die( mysql_error() );
			while ( $dados = mysql_fetch_assoc( $query2 ) ) 
		{
?>
<tr class="Linha" bgcolor="#c2c2c2">
  <td><?php echo trim($dados['NomeBase']) ?></td>
  <td><?php echo trim($dados['email']) ?></td>
  <td><?php echo trim($dados['Senha']) ?></td>
</tr>
<?php
		}
	}
$i++;
}
</table>

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.