motor de busqueda

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
vampir
Forista Distinguido
Forista Distinguido
Mensajes: 1031
Registrado: Mar Nov 21, 2006 8:00 am
Ubicación: Mi casa, Sant marçal, marratxí, mallorca, baleares, españa, europa, el mundo, planeta solar...
Contactar:

motor de busqueda

Mensaje por vampir » Lun Dic 28, 2009 11:28 pm

buenas, estoy desarrollando una aplicacion web para gestionar una bilioteca casera (tantos libros de mi padre y mios desperdigaos se olvidan xD)
ya tengo hecha la base de datos en mysql y la "aplicacion" para introducir nuevos libros, ahora estaba trabajando en la de busqueda. tengo en mente una busqueda avanzada, titulo, autor y tal, pero con una busqueda aproximada en slo parametors titulo y subtitulo (los otros son exactos ya que es un menu desplagable o el isbn) como podria hacer esto?

he encotrado esto
(SELECT * FROM libro WHERE MATCH(titulo, subtitulo, isbn, idioma, genero, autor, editorial)
AGAINST (
"'.$_POST['titulo'].'"
"'.$_POST['subtitulo'].'"
"'.$_POST['ISBN'].'"
"'.$_POST['idioma'].'"
"'.$_POST['genero'].'"
"'.$_POST['autor'].'"
"'.$_POST['editorial'].'"))
ya que no me deja anidar la sentencia select....pero eso no me vale, ya que lo que pido que busque me lo busca en todos....una ayuda que no se como seguir
linux user #439128
DebianSqueeze
http://www.acarrasco.es

Proyecto:
http://alejandria.host56.com

Código: Seleccionar todo

No sé juntar "informática" y "legal" en una misma palabra....
yo sí: LINUX
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: motor de busqueda

Mensaje por akodo » Mar Dic 29, 2009 1:41 am

Supongo que a lo que te refieres es a algo como esto:

Código: Seleccionar todo

select * from libro where titulo like '%titulo1%' and subtitulo like '%subtitulo1%' and isbn = isbn1 ...
Con esa sentencia buscas libros cuyo titulo se parezca a titulo1 y el subtitulo a subtitulo1 y el isbn sea igual al isbn1, etc
Con el <like '%titulo1%'> lo que te va a hacer es similar a una expansión del shell (como cuando pones por ejemplo "ls *.png"). Puedes considerar el '%' como un '*'

Esa sentencia debe permitir anidamiento:

Código: Seleccionar todo

select * from libro where isbn in (select num_novelas from autor) and titulo like 'un%'
Creo que se entiende el ejemplo.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
vampir
Forista Distinguido
Forista Distinguido
Mensajes: 1031
Registrado: Mar Nov 21, 2006 8:00 am
Ubicación: Mi casa, Sant marçal, marratxí, mallorca, baleares, españa, europa, el mundo, planeta solar...
Contactar:

Re: motor de busqueda

Mensaje por vampir » Mar Dic 29, 2009 4:44 am

vale....ahora solo falla que si uno de los campos titulo o subtitulo tiene varias palabras sin ser todo lo que se busca, la sentencia da error
asi que he concatenado tu respuesta con la mia...pero no me deja concatenar dos match, osease esto
select * from libro where MATCH(titulo) against ("titulo1'") and MATCH(subtitulo) against ("subtitulo1'")
me da este "error"
Can't find FULLTEXT index matching the column list
los otros campos esta solucionado de esta manera
$quetit = 'select * from libro where MATCH(titulo) against ("'.$_POST['titulo'].'") ';
if (!($_POST['autor'] =="")){
$quetit = $quetit.' and autor="'.$_POST['autor'].'"';
}
if (!($_POST['ISBN'] =="")){
$quetit = $quetit.' and isbn='.$_POST['ISBn'];
}
if (!($_POST['genero'] =="")){
$quetit = $quetit.' and genero="'.$_POST['genero'].'"';
}
if (!($_POST['idioma'] =="")){
$quetit = $quetit.' and idioma="'.$_POST['idioma'].'"';
}
if (!($_POST['editorial'] =="")){
$quetit = $quetit.' and editorial="'.$_POST['editorial'].'"';
}
los if miran si es un campo vacio, si no es asi añaden esa sentencia a lo que ya tenia...pero me falta el subtitulo...por ahora de fabula

ayuda para añadir el subtitulo

Editado -- Mar Dic 29, 2009 12:42 pm --

al final no he usado el match y e usado solo el like, poniendolo tantas veces como palabras hay en la "frase de busqueda", os dejo como ha quedado toda la sentencia final
if (($_POST['titulo'] =="")){
$quetit = 'select * from libro where titulo like "%" ';
}
else{
//$quetit = 'select * from libro where MATCH(titulo) against ("'.$_POST['titulo'].'") ';
$palabras = explode (' ',$_POST['titulo']);
$like="";
foreach ($palabras as $palabra) {
$like = ' titulo like "%'.$palabra.'%"';
}
$quetit = 'select * from libro where '.$like;
}


if (!($_POST['subtitulo'] =="")){
$palabras = explode (' ',$_POST['subtitulo']);
$like="";
foreach ($palabras as $palabra) {
$like = 'and subtitulo like "%'.$palabra.'%"';
}
$quetit = $quetit .$like;
}


if (!($_POST['autor'] =="")){
$quetit = $quetit.' and autor="'.$_POST['autor'].'"';
}


if (!($_POST['ISBN'] =="")){
$quetit = $quetit.' and isbn="'.$_POST['ISBN'].'"';
}

if (!($_POST['genero'] =="")){
$quetit = $quetit.' and genero="'.$_POST['genero'].'"';
}

if (!($_POST['idioma'] =="")){
$quetit = $quetit.' and idioma="'.$_POST['idioma'].'"';
}

if (!($_POST['editorial'] =="")){
$quetit = $quetit.' and editorial="'.$_POST['editorial'].'"';
}
linux user #439128
DebianSqueeze
http://www.acarrasco.es

Proyecto:
http://alejandria.host56.com

Código: Seleccionar todo

No sé juntar "informática" y "legal" en una misma palabra....
yo sí: LINUX
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje