Ir ao conteúdo
  • Cadastre-se

PHP Looping em tabela MySQL


Visitante
Ir à solução Resolvido por Visitante,

Posts recomendados

Olá!

Eu preciso montar uma tela onde seja exibido uma lista de publicações ordendas a critério do usuário de acordo com cada categoria a qual a publicação pertence, por exemplo: essas Categorias (LIVROS, PERIÓDICOS e CAPÍTULOS DE LIVROS), o usuário irá ordenar conforme sua necessidade, por exemplo: 1º PERIÓDICOS, 2º LIVROS, etc...

 

Eu preciso que a tabela que contenha as publicações sejam listadas abaixo de cada categoria, sendo ordenadas cada uma  pela maior data de cada publicação em sua categoria.

 

Então pensei em fazer um laço para ler a ordem das categorias e montar na tela, e abaixo de cada categoria virá as publicações de cada categoria ordenadas como falei acima ordenadas pela maior data.

 

O problema é que no meu laço, isso só está sendo feito uma única vez e não repete para as demais categorias, e que são exibidas na tela vazias, veja(CAPÍTULOS DE LIVROS e PERIÓDICOS) .

image.png.702f4db020d87c95d552e384818d5f

Quando eu mudo a ordenação das categorias o mesmo ocorre.

 

image.png.b2f903a56fc7079593772a463d602b

nesse caso as categorias PERIÓDICOS e CAPÍTULOS DE LIVROS, não recebem os dados de suas publicações.

O código do laço é esse:

<?php
/* vai receber o titulo de cada categoria para fazer a SELECT*/
global $utf_tit_categ;

$ordenacao = "SELECT titulo_categoria FROM tblcatpesquisa ORDER BY posicao";
$relaciona = mysqli_query($conecta, $ordenacao);

/* tem a variável $rowcount que recebe o total de registros da tabela de CATEGORIAS */	
for($a=0; $a <= $rowcount; $a++){
	
$ordem = mysqli_fetch_assoc($relaciona);
	$utf_tit_categ = utf8_encode($ordem['titulo_categoria']); /*a Global vai receber o nome da categoria formatado em UTF8*/
	
/* aqui é montado a exibição do título de cada uma das CATEGORIAS contadas por $rowcount */
	echo "<div class='container bg-primary'><span class='font-weight-light text-white'>{$utf_tit_categ}</span></div>";

/* faço um Query para relacionar todas as publicações referentes a CATEGORIA do primeiro loop de FOR*/
	$seleciona_itens = "SELECT datapublicacao, titulo, linkexterno FROM publicacoes WHERE categoria='$utf_tit_categ' ORDER BY datapublicacao DESC";
	$executa_busca = mysqli_query($conecta, $seleciona_itens);
	while($item = mysqli_fetch_assoc($executa_busca)){
	$utf_tit_pesq = utf8_encode($item['titulo']);	
	echo "<div id='fundo'><span class='mx-3'>{$item['datapublicacao']} - {$utf_tit_pesq} - {$item['linkexterno']}</span></div>";
	}
	mysqli_free_result($executa_busca); /*Libero a Query para uma nova consulta*/

/* o laço deve voltar daqui até que $rowcount seja atingido */

}
mysqli_free_result($relaciona);	
?>

Não sei o que estou fazendo errado, ou então o que eu deixei de fazer.

Alguém poderia me auxiliar para resolver esse problema?

Grato a todos!.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@fspjonny Olá,  não pude analisar seu código linha a linha.  Alias não sei se entendi o problema.

 

Mas veja se este artigo pode esclarecer algumas coisas sobre ordenação de resultados quando "usa um filtro"

 

https://coderdif.wordpress.com/2014/11/29/filtro-de-dados-com-checkbox-usando-ajax-e-php/

 

A parte que considero mais importante é a do php que faz a montagem da SQL para buscar os dados de acordo com o filtro selecionado.  

Link para o comentário
Compartilhar em outros sites

5 horas atrás, DiF disse:

@fspjonny Olá,  não pude analisar seu código linha a linha.  Alias não sei se entendi o problema.

 

Mas veja se este artigo pode esclarecer algumas coisas sobre ordenação de resultados quando "usa um filtro"

 

https://coderdif.wordpress.com/2014/11/29/filtro-de-dados-com-checkbox-usando-ajax-e-php/

 

A parte que considero mais importante é a do php que faz a montagem da SQL para buscar os dados de acordo com o filtro selecionado.  

Obrigado vou ler o artigo, mas o problema é bem simples para um programador mais experiente, vou tentar ilustrar abaixo melhor minha dúvida.

Considere em negrito as categorias e em itálico as publicações por categorias a qual elas pertencem.

 

Livros 

   Teoria sobre alguma coisa....

   O saber de alguma coisa...

   A história de alguma coisa...

Periódicos

   A palavra....

   Aharus series humanos....

   Photo Bouletin...

Capítulos de Livros

   The Challenging...

   Evidências de ....

   Cuidado global...

 

Essa lista acima é criada de acordo com os dados cadastrados em duas tabelas diferentes, onde uma tabela é o cadastro de categorias e a outra tabela é o cadastro de publicações, onde a categoria da publicação é buscada na tabela de categorias e inserida na publicação que levará o nome a qual categoria ela pertence, ficando assim:

 

Categoria   Titulo da Pesquisa            link_externo                                  data_da_publicacao

    Livros       Teoria sobre alguma coisa - http://pt.wikipedia.com.br/teorias - 22/08/1999.

 

Isso fica exibido fixo em uma página do site, mas a ordem de exibição pode ser alterada de acordo com o que o usuário julga ser mais importante para ele entre todas as categorias que são cadastradas, pois quem organiza essas categorias é o bibliotecário que cadastra as publicações.

 

Então o problema que eu tenho é esse:

  • Ler a ordem em que o bibliotecário ordena as categorias.
  • separar as publicações por categoria e ordenar pela maior data para a menor data
  • Exibir o filtro com esse arranjo de Categorias/publicação.

Notei que a Query não faz buscas se a Categoria contiver acentos, por exemplo: Periódicos, o 'ó' com acento não retorna nada, mesmo com uso de LIKE %, mas se eu se removo o acento, ai a query me retorna todos os periódicos cadastrados.

 

Como eu disse lá no topo, um programador mais experiente faz isso com os pés nas costas, eu tô retornando agora a programar e estou com essa dificuldade de iniciante e com problemas de resolver essa lógica.

 

Obrigado e desculpe o longo texto, mas tive que contar essa história.

 

Grato.!

adicionado 6 minutos depois

Esqueci de mencionar que o visitante do site apenas lê o que a página de publicações dispõe, mas a ordem é o bibliotecário quem as dispõe ao público, através de um CPanel de manutenção do site.

 

Grato.!

Link para o comentário
Compartilhar em outros sites

  • Solução

Consegui resolver o problema!

Como eu disse um programador mais experiente saberia fazer com os pés nas costas!

 

Fiquei com a pulga atrás da orelha com os acentos e fui atrás de verificar como isso afeta a Query, para minha surpresa é mais comum do que se pensa os problemas relacionados ao charset e a collation, sendo que eu os coloquei todo padronizado como utf8 e general_ci.

 

Resolvi o "problema" matando a variável global que recebia a categoria formatada para utf8 e passei a jogar direto na Query  como está cadastrada na tabela tabela, e deu certo todo o resto.

image.thumb.png.4eec20a405f1c627b6488d173d83ed8d.png

 

se eu entro na manutenção e altero a ordem de "importância" das categorias o resultado acompanha todo o resto.

 

image.thumb.png.b0f08b6079027bcec53dc87ffb1cffc7.png

 

Agradeço muito ao DiF, pela consideração em ajudar e agradeço a todos pela atenção e me desculpem o vacilo, mas é que ando meio enferrujado e estou voltando a ativa aos poucos.

 

Abraço a todos!

adicionado 9 minutos depois

Gostaria de marcar o tópico como resolvido.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!