Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2007, 09:54
ffjhon84
 
Fecha de Ingreso: diciembre-2007
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta LISTBOX: ¿guardar Selecciones Mult. en MySQL, despues buscar con SQL

Hola a todos: Explicare lo mejor posible
(Ya he buscado bastante en los foros antes de preguntar.... y no encontre lo que necesitaba)

Lo que pretendo hacer es algo parecido a las Paginas Amarillas, un cliente o empresa puede comprar una publicidad en una Categoria principal, pero dependiendo del plan elegido podria aparecer en otras Categorias.

Otro ejempo es el de www.masterfile.com, tambien una fotografia puede aparecer en varias categorias.
Joomla hace algo parecido, en el administrador de modulos uno elije en que categorias aparecera dicho modulo o si aparecera en todas.
En www.templatesmonster.com igual, una plantilla califica para aparecer en varias categorias.

Mi pregunta es como lograr esto almacenando los valores en la DB y obiamente tener una pagina donde se ejecute la consulta SQL y mostrar los registros que concuerden con dicha categoria.

La logica que tenia pensado para esto es: una tabla con la lista de categorias, y otra con la lista de fotos
categorias
id_cat
cat_name

Fotos
id_foto
id_cat (categoria principal)
id_cat_extra (o dejar un solo campo con la lista de categorias a la que pertenece la foto)
foto_nombre
etc....

Para almacenar los datos en la DB ulice una pequeña funcion que me guarda los campos separados por comas ej (2,6,10,14)
Código PHP:
function inCat($array){
    return 
implode(',',$array);

Nada impresionante pero funciona, lo que he podido lograr con SQL es que me busque los registros que concuerden con las categorias multiples.

Con la siguiente sentencia puedo buscar fotos de varias categorias y mostrarlas en una pagina
Código:
SELECT * FROM fotos WHERE c.id_cat IN (14,2,6)
Pero eso no es lo que quiero. Para buscar fotos que concuerden con una categoria intente los Siguente
Código:
SELECT * FROM fotos WHERE MATCH(id_cat) AGAINST('1 14 6');
no funciono porque esta sentencia busca palabras de mas de tres letras, por eso intente lo siguiente
Código:
SELECT * FROM fotos WHERE MATCH(id_cat) AGAINST('categoria1 categoria14 categoria6');
Funciono a medias porque no siempre me concordabvan los resultados.
Algunos podrian sugerir que en la tabla fotos agregue los campos de las categorias extra. Pero no me parece buena idea por que si se restringiria la cantidad de categorias extra disponibles. ej
Fotos
id_foto
id_cat
id_cat_ex1
id_cat_ex2
id_cat_ex3
id_cat_ex4
Si tengo 10,15,20 categorias solo podria elegir 4 extra, pero en algun momento alguna foto podria aplicar en varias categorias Ej: una Flor en la categoria flores, orquideas, ramos, cumpleaños, funerales etc.

Agradezco cualquier ayuda!