Skip to content

Instantly share code, notes, and snippets.

@juananruiz
Forked from jjmc/gist:1219139
Created September 15, 2011 12:44
Show Gist options
  • Save juananruiz/1219143 to your computer and use it in GitHub Desktop.
Save juananruiz/1219143 to your computer and use it in GitHub Desktop.
Clase php para jerarquizar mediante nidos
<?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