Jump to content

Tabela com valores de uma base de dados que mudam consoante titulo da coluna


Recommended Posts

rocks

Boa tarde,

Estou a desenvolver uma aplicação WEB para ver notas de alunos . O meu objetivo é ver as notas dos alunos de um determinado curso .  MAs ha vários e os cursos podem ter numero diferentes de disciplinas e no futuro podem ser adicionados novos cursos e novas cadeiras . 

 

O Objetivo geral será ter um dropdown list com o curso a b c 

 Se escolher o  aparece uma tabela com as colunas Nome aluno | Cadeira A | Cadeira b | Cadeira c (nome das cadeiras ir buscar à bd do curso A )
E ser preenchido com algo tipo Joao | 15 | 10 | 5

 Se escolher o B  aparece uma tabela com as colunas Nome aluno | Cadeira A | Cadeira b  (nome das cadeiras ir buscar à bd do curso B )
E ser preenchido com algo tipo Joao | 15 | 10

 Se escolher o C  aparece uma tabela com as colunas Nome aluno | Cadeira A| Cadeira b | Cadeira C | Cadeira D  (nome das cadeiras ir buscar à bd do curso C )
E ser preenchido com algo tipo Joao | 15 | 10 | 5 | 15 

 

A minha base de dados tem:

Tabela Curso :

  • ID
  • Nome

Tabela Cadeira

  • ID
  • Nome
  • Curso

Tabela Notas

  • ID_Aluno
  • ID_cadeira
  • Nota

 

No meu Código eu tenho este codigo para a pessoa escolher o curos 

 $curso ='';
if(isset($_POST['submit'])){
	if(!empty($_POST['curso'])) {
	  $curso = $_POST['curso'];
	}
  }

<tr>
	 <th class='filtro'>Estado:</th>
	 <th class='filtroBOLD'><select name='curso'>";
	 while ($row = mysqli_fetch_array($result)) {
		echo "<option value='" . $row['Descr'] ."'>" . $row['Descr'] ."</option>";
	}
 	 echo" </select></th>	
	 </tr>

 

Depois aqui queria mostrar as notas de um aluno .
-O objetivo seria ter uma tabela com as colunas Nome aluno | Cadeira A | Cadeira b | Cadeira c 
E ser preenchido com algo tipo Joao | 15 | 10 | 5

$sql3 = "SHOW COLUMNS FROM Cadeira where id_curso = $ID_Curso";
$result3 = mysqli_query($connect,$sql3);


if ($result3->num_rows > 0) {

	echo "<table border=0px>";

	
	while($row3 = mysqli_fetch_array($result3)){

	echo"
	 <th width=5%>".$row3['Field']."</th>

	 ";


			}

	while($row3 = mysqli_fetch_array($result3)){

		//por notas
      
	}
	echo "</table>";
} else {
	echo "Sem resultados";
}

 

 

 

Link to post
Share on other sites

E qual é precisamente a tua dúvida ou dificuldade?

PS: creio que o que queres é um "SELECT *" e não um "SHOW COLUMNS".

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to post
Share on other sites
rocks

A minha questão é como fazer a tabela de forma automática ou seja em HTML quero por no  titulo das  colunas o nome das cadeiras que estao numa BD(mas de forma automatica sem estarem la hard coded ) e depois os respetivos resultados .

Imagem exemplo da BD que tenho:  https://ibb.co/9vmwQYz

Imagem exemplo do que quero fazer no site :  https://ibb.co/LYC3J11

 

Link to post
Share on other sites
Em 05/04/2021 às 16:41, M6 disse:

E qual é precisamente a tua dúvida ou dificuldade?

PS: creio que o que queres é um "SELECT *" e não um "SHOW COLUMNS".

O SHOW COLUMNS é a apenas para o titulo das colunas 

 

A minha questão é como fazer a tabela de forma automática ou seja em HTML quero por no  titulo das  colunas o nome das cadeiras que estao numa BD(mas de forma automatica sem estarem la hard coded ) e depois os respetivos resultados .

Imagem exemplo da BD que tenho:  https://ibb.co/9vmwQYz

Imagem exemplo do que quero fazer no site :  https://ibb.co/LYC3J11

Link to post
Share on other sites

Podes fazer isso de várias formas, diria que uma das mais inteligente será a que descrevo de seguida.

Fazes um select * à tabela das disciplinas ordenado pelo ID e um loop pelo resultado para obteres o cabeçalho da tabela com os nomes das disciplinas.

Depois fazes um select * à tabela de disciplinas com um left join à tabela de notas e outro left join à tabela de alunos ordenado pelo id da tabela de disciplinas. Isso vai dar-te todas as disciplinas com os respetivas notas por aluno. Tens de ter em atenção que o left join vai ter "buracos" quando um aluno não possui nota numa disciplina.

 

Outra forma, mais trabalhosa e menos eficiente, passa por fazeres uma query para cada resultado.
Por exemplo fazes um loop pelos resultados doselect * from alunos e por cada aluno fazes um  select * from cadeiras order by nome e por cada resultado desses fazes um select * from notas para o aluno e disciplina em causa. Nesse momento tens a nota de uma aluno numa determinada disciplina (ou null caso o aluno não tenha nota nessa disciplina).

 

 

  • Thanks 1
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to post
Share on other sites
2 horas atrás, M6 disse:

Podes fazer isso de várias formas, diria que uma das mais inteligente será a que descrevo de seguida.

Fazes um select * à tabela das disciplinas ordenado pelo ID e um loop pelo resultado para obteres o cabeçalho da tabela com os nomes das disciplinas.

Depois fazes um select * à tabela de disciplinas com um left join à tabela de notas e outro left join à tabela de alunos ordenado pelo id da tabela de disciplinas. Isso vai dar-te todas as disciplinas com os respetivas notas por aluno. Tens de ter em atenção que o left join vai ter "buracos" quando um aluno não possui nota numa disciplina.

 

Outra forma, mais trabalhosa e menos eficiente, passa por fazeres uma query para cada resultado.
Por exemplo fazes um loop pelos resultados doselect * from alunos e por cada aluno fazes um  select * from cadeiras order by nome e por cada resultado desses fazes um select * from notas para o aluno e disciplina em causa. Nesse momento tens a nota de uma aluno numa determinada disciplina (ou null caso o aluno não tenha nota nessa disciplina).

 

 

Boas, peguei nisso e acho que ja me consegui safar com :

$sql3 = "select * FROM cadeiras";
$result3 = mysqli_query($connect,$sql3);

$sql4 = "SELECT DISTINCT alunos.Nome_Completo, alunos.ID from notas, alunos, cadeiras
where notas.ID_aluno = alunos.ID 
and notas.ID_Cadeira = cadeiras.ID";

$result4 = $connect->query($sql4);



$a=array();

//header
if ($result3->num_rows > 0) {

	echo "<table border=0px> <tr>
	
	<th width=5%>aluno</th>";

	
	while($row3 = mysqli_fetch_array($result3)){

	echo"
	
	 <th width=5%>".$row3['Nome_PT']."</th>";
	
	 array_push($a,$row3['ID']);

	 
			}
			echo"</tr>";

////////



while($row4 = $result4->fetch_assoc()) {

	$aluno = $row4['ID'];

	echo "<tr> 
	
	<td width=5%>".$row4['Nome_Completo']."</td> ";
	
	
	

	$length = count($a);

	for ($i = 0; $i < $length; $i++) {

		$cad = $a[$i];
		

		$sql5 = "SELECT notas.Nota from notas, alunos, cadeiras
		where notas.ID_aluno = alunos.ID 
		and notas.ID_Cadeira = cadeiras.ID
		and notas.ID_aluno = '$aluno'
		and notas.ID_Cadeira = '$cad'";

$result5 = $connect->query($sql5);

$row5 = $result5->fetch_assoc();

if ($row5['Nota'] == "" || $row5['Nota'] == '' || $row5['Nota'] = null) 
{
	echo "
		
	<td width=5%>xx</td>
	
	 ";
}
else {
	echo "
		
		
		<td width=5%>".$row5['Nota']."</td>
	
	 ";
}


		}


	

		echo "</tr>";

}	
				
	
	echo "</table>";
} else {
	echo "Sem resultados";
}

Obrigadão 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.