Jump to content


Photo

Lógica De Hierarquia


  • Faça o login para participar
2 replies to this topic

#1 onlooker

onlooker

    Normal

  • Usuários
  • 102 posts
  • Sexo:Masculino
  • Interesses:Php, MySql, JS...

Posted 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

Edição feita por: onlooker, 05/07/2009, 19:29.

"Você só é você quando ninguém está olhando" (Ann Landers)

#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 05/07/2009, 21:43

Isto provavelmente lhe ajudará:
http://dev.mysql.com...hical-data.html
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 onlooker

onlooker

    Normal

  • Usuários
  • 102 posts
  • Sexo:Masculino
  • Interesses:Php, MySql, JS...

Posted 05/07/2009, 22:28

Isto provavelmente lhe ajudará:
http://dev.mysql.com...hical-data.html


Olá Eclesiastes, primeiramente, muito obrigado, era justamente isso que eu queria. Mas ainda to um pouco perdido... abaixo estao a tabela(do exemplo) e o select:

Tabela chamada nested_category:

+-------------+----------------------+-----+-----+
| category_id | name | lft | rgt |
+-------------+----------------------+-----+-----+
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+-------------+----------------------+-----+-----+

Tabela chamada category:

+-------------+----------------------+--------+
| category_id | name | parent |
+-------------+----------------------+--------+
| 1 | ELECTRONICS | NULL |
| 2 | TELEVISIONS | 1 |
| 3 | TUBE | 2 |
| 4 | LCD | 2 |
| 5 | PLASMA | 12 |
| 6 | PORTABLE ELECTRONICS | 1 |
| 7 | MP3 PLAYERS | 6 |
| 8 | FLASH | 7 |
| 9 | CD PLAYERS | 6 |
| 10 | 2 WAY RADIOS | 6 |
+-------------+----------------------+--------+


<?
 
$consulta=mysql_query("SELECT node.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.name = 'ELECTRONICS'
ORDER BY node.lft;
");
$dados = mysql_fetch_array($consulta); 

?>


Consigo imprimir assim:

+----------------------+
| name |
+----------------------+
| ELECTRONICS |
| TELEVISIONS |
| TUBE |
| LCD |
| PLASMA |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS |
| FLASH |
| CD PLAYERS |
| 2 WAY RADIOS |
+----------------------+


Mas há um problema, pois preciso que a listagem seja hierarquica. O "plasma", tem como "pai" o ID 12, que nem sequer existe na tabela(coloquei o 12 de propósito), e ele nao deveria ser listado, pois nao faz parte da rede, mas esta sendo listado por causa do id DELE, que é 5.

Como eu poderia alterar de maneira que apenas os da mesma rede fossem exibidos?

Edição feita por: onlooker, 06/07/2009, 00:39.

"Você só é você quando ninguém está olhando" (Ann Landers)




2 user(s) are reading this topic

0 membro(s), 2 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq