> Manuales > Nubes de etiquetas en PHP

Pasamos a crear la nube de etiquetas a partir de los datos almacenados en una base de datos.

Este artículo es una mejora del anterior Código PHP de la nube de etiquetas, ya que vamos a construir igualmente la nube pero esta vez sacando los datos de una base de datos mysql.

Para empezar os dejo una posible estructura de las tablas que vamos a utilizar para almacenar los datos de las etiquetas que vamos a mostrar en la nube.

Tendriamos una tabla con los datos principales de la etiqueta, como son el id_etiqueta, nombre_etiqueta, nombre_logico, descripción_etiqueta y el número de apariciones de la etiqueta que se aumenta cada vez que se visualiza (apariciones).

Como en al artículo anterior tenemos que crear un array asociativo con el nombre de las etiquetas y su número de apariciones.

$ssql_etiquetas="select nombre_etiqueta, id_etiqueta , apariciones from etiqueta";
$rs_etiquetas=mysql_query($ssql_etiquetas);
//Creo un array para meter los datos de las etiquetas
$etiquetas = array();
while($fila_etiquetas=mysql_fetch_object($rs_etiquetas)){
   //Voy creando el array asociativo
   $etiquetas[$fila_etiquetas->nombre_etiqueta]=$fila_etiquetas->apariciones;
}


Con esto ya tendríamos nuestro array asociativos creado a partir de la base de datos. Este ejemplo es bastante simple siempre y cuando almacenemos los datos de las apariciones en la misma tabla, pero lo normal es que tengamos varias tablas, una con los datos de las etiquetas, otra con los datos de los artículos y otra que relacione ambas y de ahí sacaríamos el número de veces que aparece dicha etiqueta, para este caso el código cambiaria, y sería el siguiente;

Lo primero seria definir las tablas que vamos a utilizar.

La de etiqueta seria la misma pero quitando el campo de apariciones.

Luego tendríamos una tabla con los datos de los artículos, en la cual no me meto mucho ya que solo me interesa su clave primaria que vamos a llamar id_articulo.

Y por ultimo una tabla que relacione las dos anteriores llamada articulo_etiqueta con un campo llamado id_etiqueta y otro id_articulo donde la clave primaria seria la fusión de ambas.

Una vez definadas las tablas el código quedaría asi:

$ssql_etiquetas="select nombre_etiqueta, etiqueta.id_etiqueta from etiqueta, articulo, articulo_etiqueta where etiqueta.id_etiqueta=articulo_etiqueta.id_etiqueta and articulo.id_articulo=articulo_etiqueta.id_articulo";
}
$rs_etiquetas=mysql_query($ssql_etiquetas);
//Creo un array para meter los datos de las etiquetas
$etiquetas = array();
//Para cada etiqueta averiguo cuantas veces aparece en los articulos
while($fila_etiquetas=mysql_fetch_object($rs_etiquetas)){
   $ssql_cuantos="select count(id_etiqueta) as cuantos from articulo_etiqueta where id_etiqueta=".$fila_etiquetas->id_etiqueta." order by cuantos desc limit 20";
   $rs_cuantos=mysql_query($ssql_cuantos);
   $fila_cuantos=mysql_fetch_object($rs_cuantos);
   //Voy creando el array asociativo
   $etiquetas[$fila_etiquetas->nombre_etiqueta]=$fila_cuantos->cuantos;
}


Por lo demás el resto de código para la generación de la nube es el mismo que tenemos en el artículo Código PHP de la nube de etiquetas.

En próximos artículos mejoraremos aun más la nube de etiquetas añadiendo enlaces en los nombres de las etiquetas.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual