Foros del Web » Programando para Internet » PHP »

Ayuda para Buscador

Estas en el tema de Ayuda para Buscador en el foro de PHP en Foros del Web. Bueno, quisiera que me ayudaran con crear el buscador de imagenes para mi web, el cual debera buscar en tres tablas. El problema es un ...
  #1 (permalink)  
Antiguo 10/12/2009, 18:49
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Ayuda para Buscador

Bueno, quisiera que me ayudaran con crear el buscador de imagenes para mi web, el cual debera buscar en tres tablas.
El problema es un poco largo, espero que me puedan ayudar.

Tengo tres tablas, las cuales su estructura son

Fondos

Código:
CREATE TABLE IF NOT EXISTS `fondos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(256) DEFAULT NULL,
  `nombre_corto` varchar(256) DEFAULT NULL,
  `fecha` varchar(100) DEFAULT NULL,
  `categoria` varchar(256) DEFAULT NULL,
  `categoria_corto` varchar(256) DEFAULT NULL,
  `subcategoria` varchar(256) DEFAULT NULL,
  `subcategoria_corto` varchar(256) DEFAULT NULL,
  `visible` int(11) DEFAULT '1',
  `visitas` int(11) DEFAULT '1',
  `descargas` int(11) DEFAULT '1',
  `autor` int(11) DEFAULT NULL,
  `resolucion` varchar(256) DEFAULT NULL,
  `remitente` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
Categorias

Código:
CREATE TABLE IF NOT EXISTS `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(256) DEFAULT NULL,
  `nombre_corto` varchar(256) DEFAULT NULL,
  `fecha` datetime NOT NULL,
  `icono` varchar(100) DEFAULT NULL,
  `meta_title` varchar(256) DEFAULT NULL,
  `meta_keywords` varchar(256) DEFAULT NULL,
  `meta_description` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
Sub_categorias

Código:
CREATE TABLE IF NOT EXISTS `sub_categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(256) DEFAULT NULL,
  `nombre_corto` varchar(256) DEFAULT NULL,
  `categoria` varchar(256) DEFAULT NULL,
  `categoria_corto` varchar(256) DEFAULT NULL,
  `meta_title` varchar(256) DEFAULT NULL,
  `meta_keywords` varchar(256) DEFAULT NULL,
  `meta_description` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
Bueno, esas tres tablas son parte de la busqueda que yo quiero realizar, por ahora solo con like.

Mi problema surgio al querer en el momento de que se haga la busqueda, que se tome en cuenta la categoria y subcategoria
en donde se encuentra el fondo, ya que yo quiero que se tome el meta_Keyword de la categoria y subcategoria del fondo
al momento de buscar y implmentarlo de otra forma implicaria una recontrucción del codigo total y eso tomaria tiempo, por lo tanto ahroa les
expongo el modelo de busqueda.

Bueno, el modelo de busqueda es el siguiente:
1.- Que se seleccionen todos los fondos en los cuales en su nombre tengan la palabra buscada.
2.- En caso de que no se encuentre nada en el nombre, que se tome en cuenta ahora la categoria del mismo fondo y que se consulte ahora en la otra tabla de categorias si existen palabras buscadas en el meta_keywords de la categoria del fondo,
(En la tabla categorias abran filas con distintas categorias sin repetirse que estaran asociada a los fondos, por lo tanto la busqueda debera ser solo del meta_keywords de
la categoria del fondo en cuestión)
3.- Lo mismo, en caso de que no se encuentre las palabras o palabra buscada en el meta_keywords de la categoria del fondo, que se
tome ahora encuenta la subcategoria del mismo fondo y que se consulte ahora en la otra tabla
de sub_categorias si existen palabras buscadas en el meta_keywords de la subcategoria del fondo
(En la tabla sub_categorias abran filas con distintas subcategorias sin repetirse que estaran asociada a los fondos, por lo tanto la busqueda debera ser solo del meta_keywords de
la subcategoria del fondo en cuestión)

Bueno, ese seria el proceso de la busqueda y ahora solo queda que me devuelva todo los fondos para mostrarlo en la busqueda que cumplan alguno de los 3 requisitos y que se salte los que no.
y la busquea que se realize con el like al buscar la palabra o palabras ingresadas por el usuario.

Bueno, ahora le pido a algun experto que me pueda facilitar la consulta correcta que debere realizar para que termine por fin el
sistema de busquedas, espero que me peudan ayudar.


Nota: no tienen que tomar en cuenta los demas campos como por ejemplo categoria_corto o subcategoria_corto, pero igual los dbeeria devolver en el listado de todos los fondos que cumplan el requisito fondos.

de ante mano muchas gracias.
  #2 (permalink)  
Antiguo 10/12/2009, 21:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ayuda para Buscador

Si no quieres sobrecargar el servidor de base de datos, creo que definitivamente sera necesario rediseñar tus tablas (y la programacion).

Por ejemplo, en fondos, no es necesario que tengas el nombre o descripcion de categoria o subcategoria, es preferible solo la ID (el resto de info lo obtendrias mediante JOIN) y no requieres dos tablas para categoria y subcategoria, basta con una sola, donde si el padre es 0, entonces se trata de una categoria y si es mayor que cero se trata de una subcategoria.

De esta forma, harias una consulta a 1 sola tabla de categorias, obteniendo la ID de las que coincidan con los terminos de busqueda y despues buscar en fondos con dos condiciones:

categoria IN (lista de categorias) OR nombre LIKE '%terminos de busqueda%'

Podrias almacenar los resultados en una matriz, ordenandolos por nombre de fondo o por categoria / subcategoria y despues recorrer esa matriz para presentar los resultados en el orden que prefieras.

Ejemplo de tablas:
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `fondos` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `nombre` VARCHAR(256) DEFAULT NULL,
  4.   `nombre_corto` VARCHAR(256) DEFAULT NULL,
  5.   `fecha` VARCHAR(100) DEFAULT NULL,
  6.   `categoria` INT(11) DEFAULT NULL,
  7.   `visible` INT(11) DEFAULT '1',
  8.   `visitas` INT(11) DEFAULT '1',
  9.   `descargas` INT(11) DEFAULT '1',
  10.   `autor` INT(11) DEFAULT NULL,
  11.   `resolucion` VARCHAR(256) DEFAULT NULL,
  12.   `remitente` INT(11) DEFAULT NULL,
  13.   PRIMARY KEY (`id`)
  14. );
  15.  
  16. CREATE TABLE IF NOT EXISTS `categorias` (
  17.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  18.   `nombre` VARCHAR(256) DEFAULT NULL,
  19.   `nombre_corto` VARCHAR(256) DEFAULT NULL,
  20.   `padre` INT(11) DEFAULT 0,
  21.   `icono` VARCHAR(100) DEFAULT NULL,
  22.   `meta_title` VARCHAR(256) DEFAULT NULL,
  23.   `meta_keywords` VARCHAR(256) DEFAULT NULL,
  24.   `meta_description` VARCHAR(256) DEFAULT NULL,
  25.   PRIMARY KEY (`id`)
  26. );
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 11/12/2009, 12:57
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Ayuda para Buscador

Mucha gracias por tu respuesta, pero
es que tendría que cambiar mas de 60 paginas y por ahroa necesito terminarlo luego y por lo tanto no puedo hacer lo que me dices, pero me podrias dar esa solución aunque recargue el servidor? total solo sera por 6 meses y ademas tengo servidores dedicados muy buenos con mucha memoria ram y trasfernecia casi ilimitada...

¿podrias darme o alguien darme esa solucion de mi pregunta porfavor?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.