Portada » Lenguaje PHP » Categoría y subcategoría en PHP y MySQL

Categoría y subcategoría en PHP y MySQL

Categoría y subcategoría en PHP y MySQL. En todo sistema es primordial el uso de categorías y subcategorías y si observamos el mundo de los CMS también veremos que se basan en usar una sola tabla: Prestashop, por ejemplo.

En este tutorial aprenderás cómo crear una estructura bien definida de categorías con PHP y MySQL. Sin embargo, una vez definida puede usarlo en cuadro desplegable (Etiqueta Select) o una lista (UL LI).
A continuación, como resultado final vamos a obtener todas las categorías y subcategorías de manera dinámica.

¿Cómo funciona el script Categoría y subcategoría en PHP?

El funcionamiento es muy simple, usaremos PHP como lenguaje de programación y MySQL como gestor de base de datos.
Además, para poder desplegar las categorías y subcategorías usaremos funciones con consultas SQL.

Categoría y subcategoría en PHP y MySQL
Categoría y subcategoría en PHP y MySQL

Categoría y subcategoría en PHP y MySQL: Estructura

Trabajar con categorías en un blog o sistema web es bastante solicitado por las empresas. Sin embargo, la necesidad de usar subcategorías también es primordial.

En este tutorial explicaré cómo diseñar un esquema de base de datos para administrar categorías y subcategorías en una sola tabla. Veamos la estructura:

myproject/
|__index.php
|__funciones.php
|__config.php
|__categoria_db.sql

Para almacenar categorías y subcategorías en una sola tabla, necesitamos una manera de determinar qué categorías son las subcategorías. Por lo tanto, esto se puede lograr mediante la columna «parent_id«, todas las categorías raíz tendrán una parent_id de «0«.

Las subcategorías tendrán un «parent_id» que coincida con el identificador de la categoría primaria.

A) Base de datos del script

Trabajaremos con una base de datos llamado «categoria_db» y una tabla con nombre «categorias«.

Vamos a agregar algunos datos para que esto sea más claro.

CREATE TABLE `categorias` (
`idcat` int(11) NOT NULL,
`categoria_nombre` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`parent_id` int(11) NOT NULL,
`fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `categorias` (`idcat`, `categoria_nombre`, `parent_id`, `fecha_creacion`) VALUES
(1, 'Carreras Tecnicas', 0, '2020-10-04 14:55:02'),
(2, 'Cursos', 1, '2020-10-06 03:06:44'),
(3, 'Cursos libres', 1, '2020-10-06 03:06:44'),
(4, 'Diplomados', 0, '2020-10-06 03:07:23'),
(5, 'Contabilidad Empresarial', 4, '2020-10-07 11:40:34'),
(6, 'Administracion Gerencial', 4, '2020-10-07 11:40:37'),
(7, 'Gestion Ambiental', 4, '2020-10-07 11:40:40'),
(8, 'PHP Basico', 2, '2020-10-07 14:47:33'),
(9, 'PHP Avanzado', 2, '2020-10-07 14:47:33'),
(10, 'PHP PDO', 2, '2020-10-07 14:47:33'),
(11, 'Cpanel de Control', 3, '2020-10-07 14:48:22'),
(12, 'Wordpress Avanzado', 3, '2020-10-07 14:48:22');

ALTER TABLE `categorias`
ADD PRIMARY KEY (`idcat`);

ALTER TABLE `categorias`
MODIFY `idcat` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;

B) Archivo index.php

Al momento de cargar el script, lo primero que cargará será el fichero index.php que contiene e incluye el fichero «config.php» y fichero «funciones.php«. Además, cargara los resultados extraídos de la base de datos.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Categoria Subcategoria PHp & MySQL</title>
</head>

<body>
<?php
include_once("config.php");
include_once("funciones.php");
$categories = categories(); ?>
<?php foreach($categories as $category){ ?>
<ul class="category">
<li><?php echo $category['categoria_nombre'] ?></li>
<?php
if( ! empty($category['subcategory'])){
echo viewsubcat($category['subcategory']);
}
?>
</ul>
<?php } ?>
</body>
</html>

C) Fichero config.php

Tendrá un rol fundamental de realizar la conexión con MySQL, contendrá las credenciales del usuario MySQL, contraseña y nombre de base de datos.

<?php
function dbconnect(){
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "categoria_db";

$conn = new mysqli($host, $dbuser, $dbpass, $dbname);

if($conn->connect_error){
die("La conexion ha fallado: ".$conn->connect_error);
}

return $conn;
}
?>

D) Archivo funciones.php

Sera el motor del script, porque a través de las funciones se realizarán consultas a la base de datos para extraer la información precisa y ordenadas por categorías y subcategorías.

<?php
function categories()
{
$conn = dbconnect();

$sql = "SELECT * FROM categorias WHERE parent_id=0";
$result = $conn->query($sql);

$categories = array();

while($row = $result->fetch_assoc())
{
$categories[] = array(
'idcat' => $row['idcat'],
'parent_id' => $row['parent_id'],
'categoria_nombre' => $row['categoria_nombre'],
'subcategory' => sub_categories($row['idcat']),
);
}

return $categories;
}

function sub_categories($idcat)
{
$conn = dbconnect();

$sql = "SELECT * FROM categorias WHERE parent_id=$idcat";
$result = $conn->query($sql);

$categories = array();

while($row = $result->fetch_assoc())
{
$categories[] = array(
'idcat' => $row['idcat'],
'parent_id' => $row['parent_id'],
'categoria_nombre' => $row['categoria_nombre'],
'subcategory' => sub_categories($row['idcat']),
);
}
return $categories;
}

function viewsubcat($categories)
{
$html = '<ul class="sub-category">';
foreach($categories as $category){

$html .= '<li>'.$category['categoria_nombre'].'</li>';

if( ! empty($category['subcategory'])){
$html .= viewsubcat($category['subcategory']);
}
}
$html .= '</ul>';

return $html;
}
?>

Categoría y subcategoría en PHP y MySQL: Conclusión

Hay varias formas de estructurar el ejemplo mostrado, pero en esta ocasión hemos usado funciones y una sola tabla para mostrar las categorías y subcategorías existentes en la base de datos.

Si observan, la implementación es muy sencilla y la curva de aprendizaje es muy baja.

Espero que la presente explicación les ayude en sus proyectos en desarrollo.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad