Jump to content


onlooker

Member Since 13/04/2006
Offline Last Active 26/07/2012, 22:55
-----

Topics I've Started

[Resolvido] Duvida Em Ordenação

03/08/2009, 12:05

Olá amigos, tudo bem?

Bom, estou fazendo um sistema meio parecido com um fórum de mensagens. Tenho uma tabela chamada topicos_mensagens, onde armazeno os tópicos(titulo) e mensagens. Nessa tabela possuo os seguintes campos:

ID - Titulo - Autor - Topico_pai - Data - Forum

ID = Armazena o id da mensagem
Titulo = Armazena o titulo da mensagem(caso o usuario digite algum)
Autor = Pega o id de quem escreveu a mensagem
Topico Pai = Caso nao seja a mensagem de quem criou o topico(mensagem inicial), este campo armazenará o id do tópico a que a mensagem pertence.
Data = Armazena a data da postagem
Forum = Armazena o id do tipo de forum a que este topico pertence, pois o forum sera dividido em sessoes(exemplo: livros, revistas...)

Até ai tudo bem, o problema vem na hora de listar estes tópicos. Preciso listar apenas os titulos dos ultimos topicos criados, mas tenho de ordenálos através da data das postagens, ou seja, vem primeiro os topicos que tiverem postagem recentemente.

Tentei fazer assim:

$sql = "SELECT  *FROM topicos_mensagens WHERE forum=". $_GET['forum'] ." and isnull(topico_pai) ORDER BY data DESC LIMIT 10";

Usei o "isnull" para que apenas os resultados em que o campo "topico_pai" forem vazios, fossem retornados, pois sempre que o "topico_pai" é vazio, significa que é o titulo de algum topico. Mas ai é que esta o problema, pois a ordenação esta sendo pela data da criação do topico, pois assim foi definido por mim ao usar o isnull. Preciso que a ordenação seja pela data da ultima mensagem postada neste topico. Alguem poderia me dar uma força de como eu poderia fazer isso?

[resolvido] Paginação Com Número Pre-definido

29/07/2009, 11:29

Fala galera, beleza?

Bom, tenho uma duvida que me fez perder algumas horas de raciocinio, mas nao me fez chegar a lugar algum, resolvi vir aqui pedir ajuda dos mais experientes. Estou fazendo um sistema que possui paginação, mas essa paginação precisa sempre exibir a mesma quantidade de resultados.

Exemplo: Se houverem 64 resultados, e cada página exibir 10, a sétima página nao poderá exibir somente os 4 que restam, mas sim os 4 + 6 anteriores. É algo parecido com a paginação do orkut. Consigo fazer a paginação, mas nao consigo fazer esse esquema de sempre listar um numero pre-definido de resultados. Alguem pode me dar uma força na lógica?

Estou usando o seguinte esquema pra paginação:


<?
//Consulta a ser feita no MySQL
$sql = "SELECT * FROM tabela ORDER BY coluna DESC";

//Número de registros paginados por página
$registros_pagina = "10";

//Resgato a página que estiver sendo acessada pela paginação
$lista = (int)$_GET["lista"];

//Se for a página inicial da consulta, a variável $lista será nula
if(!$lista) {
	$pc = "1";
}
//Caso contrário, declaro o valor atual da variável $lista
else {
	$pc = $lista;
}

$inicio = $pc - 1;
$inicio = $inicio * $registros_pagina;

//Limito a consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima
$resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina");

//consulta a quantidade total de registros
$todos = mysql_query("$sql");

//Armazeno a quantidade total de registros
$tr = mysql_num_rows($todos);

//Armazeno o resultado da quantidade total de registros pela quantidade de registros por página
$tp = $tr / $registros_pagina;

//Se não houverem registros a se exibir, é acusado o retorno abaixo
if(mysql_num_rows($resultado) < 1) {
	echo "Nenhum registro encontrado";
}
//Caso contrário é exibido o resultado da consulta
else {
	//Exibo o resultado dos registros encontrados na consulta
	while($linha = mysql_fetch_array($resultado)) {
		$coluna = $linha["coluna"];

		echo "$coluna<br /><br />";
	}

	//E por fim monto os links da paginação
	$tp = ceil($tp);
	if($pc>1) {
		$anterior = $pc - 1;
		echo "<a href=\"?lista=$anterior\">[Anterior]</a> ";
	}
	for($i=$pc-5;$i<$pc;$i++) {
		if($i<=0) {
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";
		}
	}
	for($i=$pc;$i<=$pc+5;$i++) {
		if($i==$tp) {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}

			echo "</a> ";
			break;
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";

			if($i==$pc+5 && $tp>$pc+5) {
				echo " ... <a href=\"?lista=$tp\">[$tp]</a>";
			}
		}
	}
	if($pc<$tp) {
		$proxima = $pc + 1;
		echo " <a href=\"?lista=$proxima\">[Próxima]</a>";
	}
}
?>

Ordenar Por Id

06/07/2009, 12:30

Fala Galera!

Bom, ontem estive aqui pedindo uma ajuda quanto a duvida em uma logica de um sistema, consegui solucionar esse meu problema através do scriot criado por Stêffano de Moura e postado em um outro site de scripts em PHP(acho que é contra as regras divulgação com links, ne?)

Pois bem, o script funciona perfeitamente, exceto pela minha necessidade. Ele está ordenando por ID(campo id normal), preciso que ordene por ID_INDEXADO(o campo que armazena o id "pai" no banco). Tentei de algumas formas, mas não consegui. Se alguem puder dar uma força...

mapa.class
<?				  ############################################################################
					#	Por Stêffano de Moura Barbosa Cardoso...duvidas fano_linux@hotmail.com #
					############################################################################
					
 class Dbi {
								//dados do banco
	private $conexao = false;
	private $servidor = "localhost";
	private $usuario = "root";
	private $senha = "123456";
	private $banco = "teste";
	public $tabela = "usuarios2";
		
		function conectaDB(){
			
			$this->linkdb = mysql_connect($this->servidor, $this->usuario, $this->senha); // conexao
			
			if ($this->linkdb) {
				
				$this->conexao = true;  //conexao valida
				
				$this->select_db = mysql_select_db($this->banco); //select o banco
			}
			
			else {
				
				echo"Favor checar sua conexão com os dados.";
			}
		}
		
		function fecha_link() {
			
			$this->fechar = mysql_close($this->linkdb); //fecha conexao
			$this->conexao = false;
		}
	}

	class Mapa extends Dbi {
		
		public $nivel = 0;	// nivel de profundidade
			
		function pai($cod) {
						
			if($this->conexao = true) {
																// query do primeiro item (nivel zero)	
			$this->query_pai = "SELECT id, nome, id_indexado FROM ".$this->tabela." 
										   WHERE id='".$cod."'";
									  
 			$this->exec_query_pai = mysql_query($this->query_pai) or die ("<b><font color='#FF0000'>Erro ao executar a consulta</font></b>");
									
				while($this->map = mysql_fetch_array($this->exec_query_pai)) {
												
				print "<tr><td class='dataTD'>".$this->nivel."</td>";
				print "<td class=dataTD >".$this->map['id']."</td>";
				print "<td class=dataTD >".$this->map['nome']."</td>";
				print "<td class=dataTD >".$this->map['id_indexado']."</td>";

				
				$mapa = new Mapa;
				$mapa->geramapa($this->map['id'], $this->nivel+1); // chama o metodo de gerar a arvore
	 			}			
			}
		}
	
		function geramapa($codigo, $nv) {
								
			if($this->conexao = true) {
												
			$this->query = "SELECT id, nome, id_indexado FROM ".$this->tabela."
									  WHERE id_indexado='".$codigo."'";
									  
 			$this->exec_query = mysql_query($this->query) or die ("erro na query");
		 								
				while($mapeando = mysql_fetch_array($this->exec_query)) {					
								
				print "<tr><td class='dataTD'>".$nv."</td>";
				print "<td class='dataTD' >".$auxbh = $mapeando['id']."</td>";
				print "<td class='dataTD' >".$auxxm = $mapeando['nome']."</td>";
				print "<td class='dataTD' >".$auxxm = $mapeando['id_indexado']."</td>";

				
				$mapa = new Mapa;
				$mapa->geramapa($mapeando['id'], $nv+1); //pega o resultado de sua propria query e continua listando até
terminar. colocando um nivel a mais para cada query, ou cada vez q o metodo se chamar.
				

		 		   }  
		 		   
			}
		}
	}
	
?>

Lógica De Hierarquia

05/07/2009, 15:54

Ola, então pessoal, eu tenho a seguinte duvida como saber quem inidicou quem, em niveis tipo:

cod_user nome_user ind_user cidade_user
2 William 0 Penha
3 Luciane 2 Penha
4 Wagner 2 Penha
5 Maria da 2 Penha
6 Kristiano 3 Penha
7 Beto 6 Penha

Nesse exemplo o usuario de codigo 2 indicou .

3 Luciane 2 Penha
4 Wagner 2 Penha
5 Maria da 2 Penha

Assim o usuario de codigo 3 indicou.

6 Kristiano 3 Penha

E também assim o usuario de codigo 6 indicou.

7 Beto 6 Penha

......

Qual é a pergunta?

Simpes como eu vou ligar todos eles exemplo vou clicar no usuario de codigo 2

E dai o sistema vai falar OH o usuario 2 indico diretamente esses.

3 Luciane 2 Penha
4 Wagner 2 Penha
5 Maria da 2 Penha

Segundo nivel.

6 Kristiano 3 Penha

Terceiro nivel.

6 Kristiano 3 Penha


Bem assim pro primeiro nivel é facil.


<?php

$host	 = "localhost";
$user	 = "root";
$senha	 = "";
$bd	 = "banco";
mysql_connect($host,$user,$senha);
mysql_select_db($bd);

$sql = mysql_query("Select cod_user, nome_user, ind_user, cidade_user from teste");
while($a = mysql_fetch_array($sql)) {
			echo "<tr><td bgcolor=\"#CCCCCC\" background=\"img/masnoticia.jpg\" height=\"20\" style=\"color:#FFFFFF;\" align=\"left\"> ".$a[nome_user]."</td><td> - Indiciados <a href=".$PHP_SELF."?indicados=".$a[ind_user]." target=\"_blank\">(Clique)</a><br /></td></tr><br />";
	  }
if(isset($_GET['indicados'])){
$indicados = $_GET['indicados'];
$sql = mysql_query("Select cod_user, nome_user, ind_user, cidade_user from teste where ind_user=$indicados");
while($a = mysql_fetch_array($sql)) {
			echo "<tr><td bgcolor=\"#CCCCCC\" background=\"img/masnoticia.jpg\" height=\"20\" style=\"color:#FFFFFF;\" align=\"left\"> ".$a[nome_user]."</td><td> - Indiciados <a href=".$PHP_SELF."?indicados=".$a[ind_user]." target=\"_blank\">(Clique)</a><br /></td></tr>";
	  }
	  }

?>

Seu codigo esta bem porem para uma unica indicação e se fosse com niveis tipo

001 Carlos 1
002 Maria ( Amiga de Carlos ) 001
003 Joao ( Amigo de Maria ) 002
004 Pedro ( Amigo de Joao ) 003


Porem todos eles são indicados diretamente e indiretamente por Carlos.
Já que até o nivel 7 seriam da rede dele você entendeu?

Essa parte de niveis que esta complicando a cabeça

Mas e para ligar o resto

Pegar Id, Adicionando Letras E Números.

09/06/2009, 12:05

Fala pessoal, tudo bem?

Bom, estou trabalhando em um sistema que contém um cadastro. O usuário ao cadastrar recebe um número, esse número será seu acesso ao sistema, uma espécie de matricula.

Agora indo ao que interessa, pensei em pegar o id deste usuario e acrescentar no inicio três letras. Mas ai aparece outro problema, preciso que essa "matricula" tenha ao menos 4 números. Essa matricula precisa ser gerada no momento do cadastro.

Pensei no seguinte:

No cadastro, pego o último ID existente no banco, através do

SELECT MAX(id_usuario) FROM minhatabela

Até aí tudo bem, mas possuo duas dúvidas:

1 - Como faço para acrescentar 3 letras ao id? Exemplo: CAD0001(onde esse "1" seria o ID do usuario, adicionado de 3 letras iniciais, que no caso são "CAD" e 3 zeros no inicio)
2 - Como coloquei no exemplo acima, preciso que sejam 4 numeros. Se o ID que eu pegar for 23, por exemplo, como eu faço para que ele fique 0023?


Abraços :rolleyes:

IPB Skin By Virteq