Pequeña duda.

SeiYa

En los weblogs, los que en las noticias pueden estar archivadas en varias categorias ? que sistema se usa ? es por que el que yo uso, quizas podria ser mejorado, os explico.

Cada categoria tiene un numero que es una potencia de dos: 2,4,8,16,32. Y en el campo temas de la base de datos de las noticias, se almacena la suma de esos numeros, entonces si tenemos 20, sabemos que solo puede ser de las categorias 4 y 16.

Bueno, solo eso... Gracias :)

erdanblo

:S

Internet = ID_1
Software = ID_2
Hardware = ID_3
Diseño = ID_4

Cuando metas la noticia, te haces un campo select:

<select>
<option value="1">Internet</option>
<option value="2">Software</option>
<option value="3">Hardware</option>
<option value="4">Diseño</option>
</select>

Lo metes en un campo llamado categoria.

Ahora para contar:

$consulta = mysql_query("SELECT * FROM noticias WHERE categoria='$categoria'");
$contar = mysql_num_rows($consulta);

SeiYa

No me has entendido, yo quiero que una noticia pueda tener tantas categorias como categorias totales existen y que para ello no tenga que modificar la BD cada vez que meto categorias nuevas, es decir, que almacene todas en un solo campo.

Whose

Tabla noticias -> las noticias
Tabla categorias -> Las categorias
Tabla post_cat
|_ id_noticia
|_ id_categoria
Aqui se añadiria un registro por categoria, por ejemplo la noticia con id4 tiene la categoria con id 3, 5 y 7
pues añadiriamos 3 registros, no se si me entiendes.

PD: almacenarlas en un solo campo es un follon, de la manera que te digo es mas facil y ordenada

guner

almacénalas en un solo campo con un carácter separador y que luego php se encargue de separarlos.

erdanblo

A ver, si tu tienes estas categorias, Internet, Software, Hardware.

¿Tu quieres que una noticia pueda estar dentro de las tres categorias a la vez? (Internet, Software, Hardware...)?

No entiendo, ¿entonces para que haces categorias?

guner

#6, ejemplo:

Noticia: Nueva versión de GIMP
Categorías: Diseño gráfico, Software Libre.

: P

SeiYa

Ves, gunner lo ha explicado bien xD, cualquier blog funciona asi. De todos modos no habia caido en lo de muchos a muchos, yo tambien soy un poco tonto XD pero weno, ya lo tengo hecho con un solo campo y no da problemas...

Gracias :D

erdanblo

#8 Pués explicalo, asi me "deslio"

SeiYa

Bueno, como me parecia una tonteria poner una tabla intermedia en la relacion de muchos a muchos en de

noticias<----<>---->categorias

Pense en un algoritmo que me permitiera en un solo campo almacenar todas las categorias de forma sencilla y con dos funciones las cuales, una de ellas te dice si el id de la noticia que le envias por argumento tiene como categoria la categoria cuyo id envias por argumento.

Luego una segunda funcion que simplemente cuenta las noticias que tienen X categoria ayudandose de la funcion anterior.

La idea me surgio cuando recorde como funcionaba el MsgBox de visualbasic. En un solo argumento, un numero entero, indicabas el icono, los botones y no se que mas a traves de la suma de numeros.

Entonces lo hice asi:

Cada categoria, tiene la id tipica, 1,2,3 ... y luego una segunda id, llamemosla idb aunque yo la llame nombre_corto por que tenia hecho el campo y asi no me ponia a modificar xD. Bueno, pues en esta segunda id, esta almacenado un 2 elevado a la primera id.

Es decir, para que nos aclaremos:

Categoria 1, internet, idb:2
Categoria 2, juegos, idb:4
Categoria 3, musica, idb:8
Categoria 4, hostiasenvinagre, idb:16

Entonces, a la hora de seleccionar las categorias, sumara las idb's de las que haya elegido a traves de checkboxes y las sumara.

Por ejemplo: 14, sabemos que a la fuerza va a ser de las categorias 1,2 y 3.

El algoritmo seria algo asi:

Almacenamos en A la idb mas alta y el B la suma de idb's que esta almacenada en la noticia, osease, A=16 y B=12.

mientras B sea mayor o igual que 2:

si B es mayor que A entonces:
imprimimos que esta noticia tiene la categoria A
B es igual a B menos A
fin si.

A es igual a A entre 2

fin mientras.

Bueno este algoritmo funciona perfectamente, y bueno, aunque en mi web repito mucho codigo por pereza a hacer funciones, va perfecto y como me costo hacerlo pues dije, voy a compartirlo con mv que me ha gustado el sistema que use.

Un saludo :)

Usuarios habituales

  • SeiYa
  • erdanblo
  • guner
  • Whose