PHP / MySQL Jerarquía de la categoría
- joebert
- Sledgehammer


- Registrado: Feb 10, 2004
- Mensajes: 13455
- Loc: Florida
- Status: Offline
¿Alguien tiene alguna sugerencia de cosas para leer en el trabajo con las categorías y subcategorías con PHP y MySQL?
Actualmente utilizo una tabla de la categoría como esta.
Ive eliminado los campos pertinentes a la jerarquía de la categoría, como "etiqueta" y "descripción".
Cuando necesito saber todos los descendientes de una categoría dada, hago algo como esto.
Que me dé algo que el siguiente cuando uso el print_r $ c-> linaje.
Diversas rutinas, como que han sido capaces de hacer cualquier cosa que necesite, hasta la fecha. Theyre bastante simple en lo que soy en cuestión, así, que me gusta. Ive miró soluciones a categorías tales como la left_id ", right_id" solución phpBB3 aplicaciones, y que apenas se parece realmente complicado para mí.
Pero de todos modos, cualquier persona tiene alguna sugerencia para la materia de leer sobre el control de las jerarquías con PHP y MySQL?
Actualmente utilizo una tabla de la categoría como esta.
Ive eliminado los campos pertinentes a la jerarquía de la categoría, como "etiqueta" y "descripción".
MYSQL Código: [ Select ]
CREATE TABLE IF NOT EXISTS `categories` (
`category_id` smallint(5) unsigned NOT NULL auto_increment,
`parent_id` smallint(6) unsigned default NULL,
PRIMARY KEY (`category_id`),
KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
`category_id` smallint(5) unsigned NOT NULL auto_increment,
`parent_id` smallint(6) unsigned default NULL,
PRIMARY KEY (`category_id`),
KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- CREATE TABLE IF NOT EXISTS `categories` (
- `category_id` smallint(5) unsigned NOT NULL auto_increment,
- `parent_id` smallint(6) unsigned default NULL,
- PRIMARY KEY (`category_id`),
- KEY `parent_id` (`parent_id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Cuando necesito saber todos los descendientes de una categoría dada, hago algo como esto.
PHP Código: [ Select ]
function lineage($branch)
{
$decendants = array();
foreach($branch->sub_categories as $key => $val)
{
$decendants[] = $key;
$decendants = array_merge($decendants, lineage($val));
}
return $decendants;
}
$c = new stdClass;
$c->lineage = array();
$result = $db->query('SELECT category_id, parent_id FROM ' . CATEGORIES_TABLE, MYSQLI_USE_RESULT);
while($row = $result->fetch_object())
{
$row->sub_categories = array();
$c->lineage[$row->category_id] = $row;
}
$result->close();
foreach($c->lineage as $key => $val)
{
if($val->parent_id)
{
$c->lineage[$val->parent_id]->sub_categories[$key] =& $c->lineage[$key];
}
}
foreach($c->lineage as $key => $val)
{
$c->lineage[$key]->decendants = lineage($val);
}
{
$decendants = array();
foreach($branch->sub_categories as $key => $val)
{
$decendants[] = $key;
$decendants = array_merge($decendants, lineage($val));
}
return $decendants;
}
$c = new stdClass;
$c->lineage = array();
$result = $db->query('SELECT category_id, parent_id FROM ' . CATEGORIES_TABLE, MYSQLI_USE_RESULT);
while($row = $result->fetch_object())
{
$row->sub_categories = array();
$c->lineage[$row->category_id] = $row;
}
$result->close();
foreach($c->lineage as $key => $val)
{
if($val->parent_id)
{
$c->lineage[$val->parent_id]->sub_categories[$key] =& $c->lineage[$key];
}
}
foreach($c->lineage as $key => $val)
{
$c->lineage[$key]->decendants = lineage($val);
}
- function lineage($branch)
- {
- $decendants = array();
- foreach($branch->sub_categories as $key => $val)
- {
- $decendants[] = $key;
- $decendants = array_merge($decendants, lineage($val));
- }
- return $decendants;
- }
- $c = new stdClass;
- $c->lineage = array();
- $result = $db->query('SELECT category_id, parent_id FROM ' . CATEGORIES_TABLE, MYSQLI_USE_RESULT);
- while($row = $result->fetch_object())
- {
- $row->sub_categories = array();
- $c->lineage[$row->category_id] = $row;
- }
- $result->close();
- foreach($c->lineage as $key => $val)
- {
- if($val->parent_id)
- {
- $c->lineage[$val->parent_id]->sub_categories[$key] =& $c->lineage[$key];
- }
- }
- foreach($c->lineage as $key => $val)
- {
- $c->lineage[$key]->decendants = lineage($val);
- }
Que me dé algo que el siguiente cuando uso el print_r $ c-> linaje.
Código: [ Select ]
Array
(
[1] => stdClass Object
(
[category_id] => 1
[parent_id] =>
[sub_categories] => Array
(
[2] => stdClass Object
(
[category_id] => 2
[parent_id] => 1
[sub_categories] => Array
(
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
)
[decendants] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
)
)
[decendants] => Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
)
)
[2] => stdClass Object
(
[category_id] => 2
[parent_id] => 1
[sub_categories] => Array
(
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
)
[decendants] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
)
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
(
[1] => stdClass Object
(
[category_id] => 1
[parent_id] =>
[sub_categories] => Array
(
[2] => stdClass Object
(
[category_id] => 2
[parent_id] => 1
[sub_categories] => Array
(
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
)
[decendants] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
)
)
[decendants] => Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
)
)
[2] => stdClass Object
(
[category_id] => 2
[parent_id] => 1
[sub_categories] => Array
(
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
)
[decendants] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
)
[3] => stdClass Object
(
[category_id] => 3
[parent_id] => 2
[sub_categories] => Array
(
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
)
[decendants] => Array
(
[0] => 4
[1] => 5
)
)
[4] => stdClass Object
(
[category_id] => 4
[parent_id] => 3
[sub_categories] => Array
(
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
[decendants] => Array
(
[0] => 5
)
)
[5] => stdClass Object
(
[category_id] => 5
[parent_id] => 4
[sub_categories] => Array
(
)
[decendants] => Array
(
)
)
)
- Array
- (
- [1] => stdClass Object
- (
- [category_id] => 1
- [parent_id] =>
- [sub_categories] => Array
- (
- [2] => stdClass Object
- (
- [category_id] => 2
- [parent_id] => 1
- [sub_categories] => Array
- (
- [3] => stdClass Object
- (
- [category_id] => 3
- [parent_id] => 2
- [sub_categories] => Array
- (
- [4] => stdClass Object
- (
- [category_id] => 4
- [parent_id] => 3
- [sub_categories] => Array
- (
- [5] => stdClass Object
- (
- [category_id] => 5
- [parent_id] => 4
- [sub_categories] => Array
- (
- )
- [decendants] => Array
- (
- )
- )
- )
- [decendants] => Array
- (
- [0] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 4
- [1] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 3
- [1] => 4
- [2] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 2
- [1] => 3
- [2] => 4
- [3] => 5
- )
- )
- [2] => stdClass Object
- (
- [category_id] => 2
- [parent_id] => 1
- [sub_categories] => Array
- (
- [3] => stdClass Object
- (
- [category_id] => 3
- [parent_id] => 2
- [sub_categories] => Array
- (
- [4] => stdClass Object
- (
- [category_id] => 4
- [parent_id] => 3
- [sub_categories] => Array
- (
- [5] => stdClass Object
- (
- [category_id] => 5
- [parent_id] => 4
- [sub_categories] => Array
- (
- )
- [decendants] => Array
- (
- )
- )
- )
- [decendants] => Array
- (
- [0] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 4
- [1] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 3
- [1] => 4
- [2] => 5
- )
- )
- [3] => stdClass Object
- (
- [category_id] => 3
- [parent_id] => 2
- [sub_categories] => Array
- (
- [4] => stdClass Object
- (
- [category_id] => 4
- [parent_id] => 3
- [sub_categories] => Array
- (
- [5] => stdClass Object
- (
- [category_id] => 5
- [parent_id] => 4
- [sub_categories] => Array
- (
- )
- [decendants] => Array
- (
- )
- )
- )
- [decendants] => Array
- (
- [0] => 5
- )
- )
- )
- [decendants] => Array
- (
- [0] => 4
- [1] => 5
- )
- )
- [4] => stdClass Object
- (
- [category_id] => 4
- [parent_id] => 3
- [sub_categories] => Array
- (
- [5] => stdClass Object
- (
- [category_id] => 5
- [parent_id] => 4
- [sub_categories] => Array
- (
- )
- [decendants] => Array
- (
- )
- )
- )
- [decendants] => Array
- (
- [0] => 5
- )
- )
- [5] => stdClass Object
- (
- [category_id] => 5
- [parent_id] => 4
- [sub_categories] => Array
- (
- )
- [decendants] => Array
- (
- )
- )
- )
Diversas rutinas, como que han sido capaces de hacer cualquier cosa que necesite, hasta la fecha. Theyre bastante simple en lo que soy en cuestión, así, que me gusta. Ive miró soluciones a categorías tales como la left_id ", right_id" solución phpBB3 aplicaciones, y que apenas se parece realmente complicado para mí.
Pero de todos modos, cualquier persona tiene alguna sugerencia para la materia de leer sobre el control de las jerarquías con PHP y MySQL?
Strong with this one, the sudo is.
- Anonymous
- Bot


- Registrado: 25 Feb 2008
- Mensajes: ?
- Loc: Ozzuland
- Status: Online
Octubre 31st, 2009, 3:05 pm
Página 1 de 1
Para responder a este tema que necesita para ingresar o registrarse. Es gratis.
Publicar Información
- Total de mensajes en este tema: 1 mensaje
- Usuarios navegando por este Foro: Kurthead+1 y 138 invitados
- No puede abrir nuevos temas en este Foro
- No puede responder a temas en este Foro
- No puede editar sus mensajes en este Foro
- No puede borrar sus mensajes en este Foro
- No puede enviar adjuntos en este Foro
