Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Querys produtos/categorias [resolvido]

Mensagens Recomendadas

bioshock

Olá pessoal!

Estou com alguma dificuldade em obter a query que desejo. O KingPito já me disse como fazer, e eu fiz da forma que ele disse, e pensei que tivesse funcionado. Contudo, testei mais a fundo e não funcionou como esperava.

Eu ando a criar páginas dinâmicas, um único ficheiro cria várias páginas.

Na página index, listo as categorias da base de dados e crio uma página para cada categoria.

<?php
include ("connection.inc");
$query2 = mysql_query("SELECT * FROM categorias")or die("error:" .mysql_error());
while($rows = mysql_fetch_array($query2)) {
        // Mostra os detalhas nas linhas
	$id = $rows['id'];
	$nome = $rows['nome'];
	echo "<li><a href=\"s-produtos".".php?cat=".$id."\" id=\"link_".$id."\">".$rows['nome']."</a></li>";
$myFile = "s-produtos".".php";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, '<?php include("insertPages.php")?>');
fclose($fh);
}
?>

Na página de listagem dos produtos, tenho:

<?php 
include ("connection.inc");
$query = mysql_query("SELECT * FROM produtos WHERE id = '" . $_GET['cat'] . "'")or die("Error: " .mysql_error());
while($rows = mysql_fetch_array($query)){
$id = $rows['id'];
    $nome = $rows['nome'];
$preco = $rows['preco'];
    $promocao = $rows['promocao'];
$descricao = $rows['descricao'];
    $imagem = $rows['imagem'];
$categoria = $rows['categoria'];

// cria as linhas
echo "<tr><td><b>Nome:</b></td> $nome<br></th>";
    echo "<input type='image' name='imageField' id='imageField' src='images/thumbs/$imagem'>";
echo "<b>Descrição:</b> $descricao<br>";
    echo "<b>Preço:</b> $preco €<br>";
echo "<b>Promoção:</b> $promocao %<br><br><br></tr>";
}
?>

Com estes códigos, eu tinha como pretendido que me aparecesse no url:

Produtos/s-produtos.php?cat=1

E aparece, mas não restringe os produtos às categorias (o problema tem que estar na query)

Mas eu consigo fazer com que dê para restringir os produtos, alterando as seguintes linhas de código:

index

echo "<li><a href=\"s-produtos".".php?cat=".$nome."\" id=\"link_".$id."\">".$rows['nome']."</a></li>";

listar produtos

$query = mysql_query("SELECT * FROM produtos WHERE categoria = '" . $_GET['cat'] . "'")or die("Error: " .mysql_error());

Mas assim, no url iria me aparecer:

http://localhost/Produtos/s-produtos.php?cat=Vinhos

E eu pretendo que me apareça o ID da categoria.

Já tentei com o SELECT IN, mas sem efeito.

Sugestões  ;)? Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Por acaso até é melhor fazer pelo nome, por causa dos motores de busca, mas tens que garantir que os nomes são mesmo únicos. Além disso, isso bem feitinho era com mod_rewrite...

Mas adiante...

Para ir buscar os produtos por id da categoria tens de ter, na tabela dos produtos, o id da categoria (tipo, duh!). Vê lá se te lembras desta minha sugestão:

1. não "ligues" tabelas por campos de texto. Reparei que as duas tabelas estão ligadas pelo campo "nome" das categorias - não faças isto. O MySQL é muito mais eficaz com números. Na tabela dos produtos crias um campo "categoria_id" e jogas com esse. Podes retirar o campo "categoria" da tabela produtos, que tem o nome da categoria. Para ficar ainda mais rápido, deves marcar esse campo "categoria_id" como índice;

Como tens, podes fazer a query da seguinte forma, mas lembra-te que comparações por string na BD são altamente ineficientes relativamente a comparações por inteiro indexado:

SELECT produtos.*
FROM produtos
LEFT JOIN categorias ON (categoria.nome = produtos.categoria)
WHERE categoria.id = $_GET['cat']

Olha, com tantos posts que tens para aí, já colocavas a estrutura da BD, sempre fica mais fácil... para nós.

P.S.: agora estava a olhar melhor para o teu código... Vê lá se consegues detectar onde é que está a idiotice nesta linha de código:

$query = mysql_query("SELECT * FROM produtos WHERE id = '" . $_GET['cat'] . "'")or die("Error: " .mysql_error());


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Olá!

Acredites ou não eu já estava aqui a ler isto:

http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php quando me mandaste a resposta ao tópico.

Já estava à espera que me dissesses isso, sobre utilizar inteiros em vez de strings  ;)

De resto, em relação ao código só tive que alterar dois pontos:

$query = mysql_query("SELECT * FROM produtos LEFT JOIN categorias ON (categorias.nome = produtos.categoria) WHERE categorias.id = '".$_GET['cat']."'") or die("Error: " .mysql_error());

Obrigado mjamado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.