Ir para conteúdo
Fórum Script Brasil
  • 0

Visualização Unificada De Subcategorias


Regex

Pergunta

Olá a todos!

Estou fazendo um sistema de notícias e necessito listar as categorias e as subcategorias das notícias através de uma única query mysql. (o resultado final deverá ser algo como http://lista.mercadolivre.com.br/_CategID_1499).

Pois bem, não estou conseguindo fazer um SELECT correto para gerar o resultado esperado. Está acontecendo que a página repete as categorias, vejam abaixo:

Geral

Diversas

Tecnologia

Novidades

Tecnologia

Segurança

(neste caso 'segurança' e 'novidades' deveriam estar juntos logo abaixo de 'tecnologia', e não repetindo 'tecnologia' como no exemplo).

A minha query atual é esta:

$query_catsubcatAll = sprintf("SELECT * FROM categorias_noticias INNER JOIN subcategorias_noticias ON catnot_id = subcatnot_cat WHERE catnot_idioma = %s  ", $colname_catsubcatAll);

As tabelas são:

categorias_noticias

catnot_id

e

subcategorias_noticias

subcatnot_id

subcatnot_cat

Já tentei GROUP BY (agrupando os IDs) mas não obtive o resultado esperado. A mesma coisa com SELECT DISTINCT. Imagino que eu deveria fazer uma select interna filtrando as subcategorias, mas como? Meu conhecimento foi até aqui...

Agradeceria se alguém pudesse me dar uma luz.

Abraços.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

tenta o seguinte:

SELECT c.categorias_noticias, s.subcategorias_noticias FROM categorias_noticias c INNER JOIN subcategorias_noticias s ON c.catnot_id = s.subcatnot_cat WHERE c.catnot_idioma = %s

outra coisa, eu acho que a sintaxe do sprintf está errada.

abraço!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Kandrade,

Obrigado pela contribuição.. A resposta retornada foi:

Unknown column 'c.categorias_noticias' in 'field list'

O que significam estes prefixos 'c' e 's'? São variáveis locais, para facilitar a sintaxe? Agradeceria muito se você pudesse me ajudar! =]

Obs.: a sintaxe sprintf está correta.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

O que significam estes prefixos 'c' e 's'? São variáveis locais, para facilitar a sintaxe? Agradeceria muito se você pudesse me ajudar! =]

Isso mesmo, é pra facilitar na escrita da consulta.

Voce poderia escrever por exemplo: categorias_noticias.catnot_id ou nesse caso c.catnot_id

O erro retornado é: essa coluna categorias_noticias não existe na tabela categorias_noticias e realmente não deve existir.

Voce precisa projetar os dados de retorno, por exemplo:

SELECT c.catnot_id, s.subcategorias_noticias FROM categorias_noticias c INNER JOIN subcategorias_noticias s ON c.catnot_id = s.subcatnot_cat WHERE c.catnot_idioma = %s

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Kandrade,

Obrigado pela ajuda.

Vou postar a estrutura das minhas tabelas e o contexto geral para que você as entenda:

Tabelas:

noticias

  • noticias_id //id da noticia

categorias_noticias

  • catnot_id //id da categoria de noticia
  • catnot_idioma //idioma da categoria (session)

subcategorias_noticias

  • subcatnot_id //id da subcategoria da noticia
  • subcatnot_cat //campo que faz referencia a categoria associada ao registro.

Abaixo, o código original da minha página:

<?php require_once('../Connections/site.php'); ?>
<?php 
$colname_catsubcatAll = "1";
if (isset($_SESSION['idioma'])) {
  $colname_catsubcatAll = (get_magic_quotes_gpc()) ? $_SESSION['idioma'] : addslashes($_SESSION['idioma']);
}
mysql_select_db($database_site, $site);
$query_catsubcatAll = sprintf("SELECT c.catnot_id, s.subcategorias_noticias FROM categorias_noticias c INNER JOIN subcategorias_noticias s ON c.catnot_id = s.subcatnot_cat WHERE c.catnot_idioma = %s", $colname_catsubcatAll);


$catsubcatAll = mysql_query($query_catsubcatAll, $site) or die(mysql_error());
$row_catsubcatAll = mysql_fetch_assoc($catsubcatAll);
$totalRows_catsubcatAll = mysql_num_rows($catsubcatAll);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>

<?php do { ?>
<p><strong>
<li><?php echo $row_catsubcatAll['catnot_nome']; ?> - <?php echo $row_catsubcatAll['subcatnot_nome']; ?></li> 
</strong></p>
<?php } while ($row_catsubcatAll = mysql_fetch_assoc($catsubcatAll)); ?>
<p> </p>
</body>
</html>
<?php
mysql_free_result($catsubcatAll);
?>

Obs.: a query está como você sugeriu.

A forma como você e indicou fez mudanças na sintaxe mas não no resulado final. Agradecera muito se você pudesse me ajudar...

Grato

Diego Medeiros

Link para o comentário
Compartilhar em outros sites

  • 0

cara, agora entendi o que voce quer

olha só:

<?php do { ?>
<p><strong>
<li><?php echo $row_catsubcatAll['catnot_nome']; ?> - <?php echo $row_catsubcatAll['subcatnot_nome']; ?></li> // acada tupla retornada da consulta voce escreve a categoria a que ela pertence.
</strong></p>
<?php } while ($row_catsubcatAll = mysql_fetch_assoc($catsubcatAll)); ?>

eu acho que não tem como uma query retornar uma vez só a categoria correta e depois NULL ou vazio sei lá

acho que só com programação voce resolve isso.

Link para o comentário
Compartilhar em outros sites

  • 0

Kandrade,

foi mal, postei o código que contém o layout errado... aff

Atualmente está assim:

como_eh.gif

(repete o nome da categoria para cada subcategoria existente)

Eu gostaria que fosse assim:

como_deve.gif

(a query mostrasse todas as sub-categorias para cada categoria onde o ponteiro do while estiver).

Grato

Link para o comentário
Compartilhar em outros sites

  • 0

tenta fazer uma gambiarra huauhauhauh

<?php 
$vpocorrencia = ""; 
do { ?>
<p><strong>
<li><?php 
if(!strcmp($vpocorrencia, $row_catsubcatAll['catnot_nome']))
   echo $row_catsubcatAll['catnot_nome']; 
?> - <?php echo $row_catsubcatAll['subcatnot_nome']; ?></li> // acada tupla retornada da consulta voce escreve a categoria a que ela pertence.
</strong></p>
<?php } while ($row_catsubcatAll = mysql_fetch_assoc($catsubcatAll)); ?>

Link para o comentário
Compartilhar em outros sites

  • 0

heuheuehe

Eu já tinha pensado em fazer algo assim.. só que com strstr() e explode()........

Mas não funciona..

Será que seu eu enviar um email para o Mercado Livre eles me mandam a query daquela página por email? eheuehehehuehue

Isso bem que podia virar um desafio MySQL, não? =]

vlw

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...