Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um problema e não tenho a menor ideia de como resolver.
São duas tabelas: uma chamada miniaturas e outras chamada categorias.
Da tabela miniaturas quero exibir os seguintes campos: Descrição(na tabela o campo é nome), categoria, e o preço (sendo que o preço deve ser retornado com o maior valor);
E da tabela categorias, devo retornar o nome da categoria.
É um sistema de miniaturas de automóveis. Então o nome da categoria seria automóvel, avião, motocicleta, enfim.
O código ficou assim:
<?php
include "conexao.inc";
//a tabela miniaturas fazendo ligação com a categorias, estão relacionadas
$sql = "SELECT id_categoria, nome, MAX(preco) AS maiorPreco, categorias.cat_nome";
$sql = $sql . " FROM miniaturas";
$sql = $sql . " INNER JOIN categorias";
$sql = $sql . " ON miniaturas.id_categoria = categorias.id";
$sql = $sql . " GROUP By cat_nome";
$sql = $sql . " ORDER BY preco desc";
$rs = mysql_query($sql) or die(mysql_error());
$total_registros = mysql_num_rows($rs);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sem título</title>
<style type="text/css">
body {
font: 80% verdana;
}
table {
font: 90% verdana;
border-collapse: collapse;
border: 1px solid #000;
margin: 0 auto;
}
th, td {
padding: 3px;
border: 1px solid #000;
}
th {
padding: 3px;
background: #ccc;
}
</style>
</head>
<body>
<p>
Sentença sql para este exercício: <strong><?php echo $sql; ?></strong><br />
Total de registros retornados pela consulta: <strong><?php echo $total_registros; ?></strong>
</p>
<table>
<thead>
<tr>
<th>Descrição</th>
<th>Categoria</th>
<th>Nome Categoria</th>
<th>Miniatura com Maior Preço</th>
</tr>
</thead>
<?php
while ($reg = mysql_fetch_array($rs)) {
//exibindo as informações dos campos
$descricao = $reg['nome'];
$id_categoria = $reg['id_categoria'];
$categoria = $reg['cat_nome'];
$maiorPreco = $reg['maiorPreco'];
?>
<tr>
<td><?php echo $descricao; ?></td>
<td><?php echo $id_categoria; ?></td>
<td><?php echo $categoria; ?></td>
<td><?php echo $maiorPreco; ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
<?php
mysql_free_result($rs);
mysql_close($conexao);
?>
O resultado foi exibido da seguinte forma:
Descrição Categoria Nome Categoria Miniatura com Maior Preço
Embraer ERJ 135 6 Aviões 312
American LaFrance Fire Pumper 4 Caminhões 169
Marcopolo Paradiso 1200 1 Ônibus 248
Volvo S40 2 Automóveis 310
JDH 5 Motocicletas 85
Retroescavadeira 416E 3 Máquinas pesadas 295
Dodge Military Power Wagon 7 Militares 110
Parece que deu certo. Mas resolvi verificar se a descrição (que na tabela se chama nome) batia com o valor. É para retornar o maior preço da miniatura de cada categoria. Se eu tirar a coluna descrição, fica tudo certo. Só que eu quero que seja exibido a descrição.
Embraer ERJ 135 não é o mais caro da categoria Aviões. A consulta retornou a primeira descrição da categoria e não a descrição correta que seria um Boeing 747-Cargo, como mostra a tabela abaixo usando como exemplo a categoria Aviões:
Descrição Categoria Preço
Boeing 747-Cargo 6 312
Nesta tabela, não é exibido o nome da categoria.
O que esta errado na consulta SQL. Eu realmente não sei porque não retornou a descrição correta da categoria.
Acabei de ver que o preço deveria esta em ordem descendente. Na minha concepção, depois do 312 deveria vir 310. Não é isso.
Resumindo, é pego o primeiro nome da categoria da tabela miniaturas, mas o maior preço da categoria. Não entendi o porque disso e nem como resolver.
Alguém pode ajudar a entender?
Carregando comentários...