Created
September 15, 2011 12:42
-
-
Save jjmc/1219139 to your computer and use it in GitHub Desktop.
Clase php para jerarquizar mediante nidos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//--------------------------------------------------------------------------------------------------- | |
// Proyecto: jerarquia | |
// Archivo: class/nodo.php | |
// Tipo: definicion de clase | |
// Desarrolladores: Juanan Ruiz (juanan@us.es) y jjmc@us.es | |
//--------------------------------------------------------------------------------------------------- | |
// Descripcion: lista, crea, borrar y edita nodos (falta mover nodos) | |
//--------------------------------------------------------------------------------------------------- | |
class nodo extends ADOdb_Active_Record | |
{ | |
var $_table = 'DE_nodo'; | |
function listar() | |
{ | |
$db = $this->DB(); | |
$query ="SELECT COUNT(parent.id) - 1 as dep , node.alias AS alias, node.lft as izq, node.rgt as der, node.id as id | |
FROM DE_nodo AS node, | |
DE_nodo AS parent | |
WHERE node.lft BETWEEN parent.lft AND parent.rgt | |
GROUP BY node.id | |
ORDER BY node.lft"; | |
$lista = $db->getall($query); | |
return $lista; | |
} | |
function crear_hermano($id,$alias,$descripcion) | |
{ | |
$db = $this->DB(); | |
$query0 = "LOCK TABLE DE_nodo WRITE"; | |
$query1 = "SELECT @myRight := rgt FROM DE_nodo WHERE id = $id"; | |
$query2 = "UPDATE DE_nodo SET rgt = rgt + 2 WHERE rgt > @myRight"; | |
$query3 = "UPDATE DE_nodo SET lft = lft + 2 WHERE lft > @myRight"; | |
$query4 = "INSERT INTO DE_nodo (alias, descripcion,lft, rgt) VALUES ('$alias','$descripcion', @myRight + 1, @myRight + 2)"; | |
$query5 = "UNLOCK TABLES"; | |
$db->StartTrans(); | |
$db->Execute($query0); | |
$db->Execute($query1); | |
$db->Execute($query2); | |
$db->Execute($query3); | |
$db->Execute($query4); | |
$db->Execute($query5); | |
$db->CompleteTrans(); | |
} | |
function crear_hijo($id,$alias,$descripcion) | |
{ | |
$db = $this->DB(); | |
$query0 = "LOCK TABLE DE_nodo WRITE"; | |
$query1 = "SELECT @myLeft := lft FROM DE_nodo WHERE id = $id"; | |
$query2 = "UPDATE DE_nodo SET rgt = rgt + 2 WHERE rgt > @myLeft"; | |
$query3 = "UPDATE DE_nodo SET lft = lft + 2 WHERE lft > @myLeft"; | |
$query4 = "INSERT INTO DE_nodo (alias, descripcion,lft, rgt) VALUES ('$alias','$descripcion', @myLeft + 1, @myLeft + 2)"; | |
$query5 = "UNLOCK TABLES"; | |
$db->StartTrans(); | |
$db->Execute($query0); | |
$db->Execute($query1); | |
$db->Execute($query2); | |
$db->Execute($query3); | |
$db->Execute($query4); | |
$db->Execute($query5); | |
$db->CompleteTrans(); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment