Foros del Web » Programando para Internet » PHP »

Me ayudan con esta consulta

Estas en el tema de Me ayudan con esta consulta en el foro de PHP en Foros del Web. Hola amigos , necesitaria que me ayuden a realizar una consulta para buscar en base de datos , nunca lo hise y no lo se ...

  #1 (permalink)  
Antiguo 24/02/2009, 09:27
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Me ayudan con esta consulta

Hola amigos , necesitaria que me ayuden a realizar una consulta para buscar en base de datos , nunca lo hise y no lo se hacer , pero creo que la que necesito es MATCH AGAINST , porque es para buscar varias palabras , diganme la manera mas facil de buscar.


Espero qe me puedan ayudar , un abrazo
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #2 (permalink)  
Antiguo 24/02/2009, 09:29
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Me ayudan con esta consulta

Pero expliocate mejor..
Tienes mysql?
Que exactamente deseas consultar?
  #3 (permalink)  
Antiguo 24/02/2009, 09:48
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

es para hacer una busqueda en mysql , como antes dije de varias palabras.
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #4 (permalink)  
Antiguo 24/02/2009, 09:49
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Me ayudan con esta consulta

Bueno, creo (como no te explicas bien) que es asi lo que quieres:
$consulta = mysql_query("SELECT * FROM tabla WHERE valor = valor");
  #5 (permalink)  
Antiguo 24/02/2009, 09:56
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Mensajes: 421
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Me ayudan con esta consulta

Haber una consulta es asi:
Select *
From tabla
Where condicion

Ahora lo q dices varias palabras similares
select *
from usuario
where nombre like "%luis%"
Eso devuelve todos los usuarios que tienen "luis" en algún lugar del campo nombre. Nos sevolvería los registros con nombres como "luis", "luis alberto" o "jose luis".
  #6 (permalink)  
Antiguo 24/02/2009, 10:05
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

gracias por responder , pero , andaria bien en una busqueda para una frase por ejemplo:
"seria de tv house" y buscaria todos los articulos que tengan en nombre o contenido estas palabras ?
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #7 (permalink)  
Antiguo 24/02/2009, 10:08
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Mensajes: 421
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Me ayudan con esta consulta

pero esa es la idea q quieres ??? o no
  #8 (permalink)  
Antiguo 24/02/2009, 10:36
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

yo quiero hacer un buscador para mi web que busque frases y palabras
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #9 (permalink)  
Antiguo 24/02/2009, 10:46
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Mensajes: 421
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Me ayudan con esta consulta

haberlo dicho haci de manera clara y precisa es muy facil hacer esto pero que mejor manera de hacerlo fijandote en lo faq existen muy buenos ahi ,decirte como se asi aqui seria volver a repetir una cosa ya echa
Te cuidas
  #10 (permalink)  
Antiguo 24/02/2009, 11:27
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

muchas gracias por responder , busque en los faq's pero lo unico que encontre en aportes un buscador que no usa mysql :S
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #11 (permalink)  
Antiguo 24/02/2009, 11:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Me ayudan con esta consulta

http://www.forosdelweb.com/f18/aport...-mysql-632623/
  #12 (permalink)  
Antiguo 24/02/2009, 12:38
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

hola ronRuby saque la consulta a mysql de ahi pero me da error , la modifique asi:

Código PHP:
Ver original
  1. $rs = mysql_query("SELECT * MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) ORDER BY coincidencias DESC");

No se porque , tambien probe cambiar la palabra "coincidencias" por "nombre" pero me sigue tirando error
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #13 (permalink)  
Antiguo 24/02/2009, 13:11
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Me ayudan con esta consulta

¿Creaste el FULLTEXT KEY en tu base de datos?

Código sql:
Ver original
  1. CREATE TABLE `noticias` (
  2. `noticia_ID` INT(11) NOT NULL AUTO_INCREMENT,
  3. `noticiaTitulo` VARCHAR(200) NOT NULL,
  4. `noticiaNoticia` text NOT NULL,
  5. PRIMARY KEY (`noticia_ID`),
  6. FULLTEXT KEY `buscador` (`noticiaTitulo`,`noticiaNoticia`) --Fijate en esta parte
  7. ) ENGINE=MyISAM;
  #14 (permalink)  
Antiguo 24/02/2009, 13:24
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

si puse FULL TEXT a los campos "nombre y mensaje" , esta bien , no?
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #15 (permalink)  
Antiguo 24/02/2009, 13:28
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Me ayudan con esta consulta

Que error te muestra al hacer la consulta?
  #16 (permalink)  
Antiguo 24/02/2009, 13:40
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: Me ayudan con esta consulta

SELECT * MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) ORDER BY coincidencias DESC

No se mucho de MATCH AGAINST, pero estoy seguro que en esa consulta hay un error de sintaxis (o semantica? )
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 24/02/2009, 13:54
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Me ayudan con esta consulta

De hecho asi es que se usa el MATCH AGAINST.
http://www.forosdelweb.com/f18/aport...-mysql-632623/

Pero gracias a tu mensaje vi un error.
tata009, te falta una "," (coma) despues de *

SELECT *, MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) ORDER BY coincidencias DESC
  #18 (permalink)  
Antiguo 24/02/2009, 14:18
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: Me ayudan con esta consulta

Cita:
Iniciado por mi mismo
No se mucho de MATCH AGAINST
Corrijo: yo solo se que no se nada ... al menos sirvio para algo.

Gracias por el link Ronruby.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 24/02/2009, 15:30
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
hola muchisimas gracias , ya no tira el error , pero no me da resultados , y le pongo el titulo completo de un post y tampoco lo muestra

probe sacando BOOLEAN MODE y me sale esto : Can't find FULLTEXT index matching the column list


PD: por lo que veo nombre y mensaje son full text , no se porque me aparece esto
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos

Última edición por GatorV; 24/02/2009 a las 15:51
  #20 (permalink)  
Antiguo 24/02/2009, 15:59
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: Me ayudan con esta consulta

Lo que te dice es que no hay un indice FULLTEXT en la tabla, Ronruby te lo explico aqui
__________________
- León, Guanajuato
- GV-Foto
  #21 (permalink)  
Antiguo 24/02/2009, 16:12
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

hola creo que estan creadas miren:

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `posts` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `nombre` text NOT NULL,
  4.   `mensaje` text NOT NULL,
  5.   `nick` text NOT NULL,
  6.   `avatar` text NOT NULL,
  7.   `categoria` text NOT NULL,
  8.   `puntos` INT(11) NOT NULL,
  9.   `lock` VARCHAR(3) DEFAULT NULL,
  10.   `no_comm` VARCHAR(3) DEFAULT NULL,
  11.   `lecturas` longtext NOT NULL,
  12.   `tags` VARCHAR(100) NOT NULL,
  13.   `id_usuario` INT(11) NOT NULL,
  14.   `fecha` datetime NOT NULL,
  15.   `post_numero` VARCHAR(255) NOT NULL,
  16.   PRIMARY KEY  (`id`),
  17.   FULLTEXT KEY `mensaje` (`mensaje`),
  18.   FULLTEXT KEY `nombre` (`nombre`)
  19. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=167 ;
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #22 (permalink)  
Antiguo 24/02/2009, 16:46
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: Me ayudan con esta consulta

No me hagas mucho caso, pero creo que solo puede haber un FULLTEXT en la tabla, revisa nuevamente la sugerencia que te dio Ronruby:

Cita:
Iniciado por Ronruby
FULLTEXT KEY `buscador` (`mensaje`,`nombre`) --Fijate en esta parte
Ahora, yo me pregunto si nick, avatar, categoria e, incluso, nombre pudieran ser campos tipo varchar con una longitud definida en lugar de ser campos tipo texto; asi como lecturas podria ser un int(10) en caso de ser un contador y post_numero tambien como entero.
__________________
- León, Guanajuato
- GV-Foto
  #23 (permalink)  
Antiguo 24/02/2009, 17:07
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

como puede ser que solo pueda haber un full text si ahi mismo esta agregando

Código SQL:
Ver original
  1. FULLTEXT KEY `buscador` (`noticiaTitulo`,`noticiaNoticia`) --Fijate en esta parte

: estoy confundido y no me sale
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #24 (permalink)  
Antiguo 24/02/2009, 17:07
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Me ayudan con esta consulta

un error del copy pasteo es dar por hecho que funciona a la primera, un consejo

trata de separar un gran problema en partes mas pequenias asi vas aprendiendo como funciona y vas corrigiendo errores.

otra cosa para pensar, ese tipo de consultas genera mucha carga en la base de datos dependiendo del tamanio y otras cosas, por esto foros o sitios grandes externalizan las busquedas de contenidos a google por ejemplo.

tambien si estas ocupando consultas que no entiendes corres el riesgo de hacer mas vulnerable tu sitio, por ejemplo nunca deberia ir un post o un get sin antes validarlo, es decir que estas validando por ejemplo que solo se busque texto alfanumerico y no que se puedan ingresar todo tipo de cosas, mysql injection ocupa consultas vulnerables como esas.
__________________
Ayuda!! firmar y compartir
No a la privatizacion de semillas http://www.thepetitionsite.com/1/no-...n-de-semillas/
Mas info: http://chilesintransgenicos.cl/
  #25 (permalink)  
Antiguo 24/02/2009, 17:36
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

gracias por el concejo , pero necesesito una busqueda asi , yo antes usaba google pero ahora necesesito esta y no me sale :S
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #26 (permalink)  
Antiguo 24/02/2009, 17:52
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: Me ayudan con esta consulta

Tu codigo en http://www.forosdelweb.com/f18/ayuda...2/#post2796621:

Código sql:
Ver original
  1. -- Estas queriendo agregar un FULLTEXT para mensaje y otro para nombre
  2. FULLTEXT KEY `mensaje` (`mensaje`),
  3. FULLTEXT KEY `nombre` (`nombre`)
  4.  
  5. -- Lo correcto es crear solo uno que incluya todos los campos donde desees realizar una busqueda con MATCH AGAINST:
  6. FULLTEXT KEY `buscador' (`mensaje`, `nombre`)

Y tu consulta:

SELECT * MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensaje) AGAINST ('$_GET[search]' IN BOOLEAN MODE) ORDER BY coincidencias DESC

Debes usar {$_GET['search']}, si se te complica mucho usar las llaves y poner comillas a los indices de una matriz, entonces primero asigna la frase a una variable:

Código php:
Ver original
  1. $buscar = $_GET['search']
  2. $sql = "SELECT * MATCH (nombre, mensaje) AGAINST ('$buscar' IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensaje) AGAINST ('$buscar' IN BOOLEAN MODE) ORDER BY coincidencias DESC";
__________________
- León, Guanajuato
- GV-Foto
  #27 (permalink)  
Antiguo 24/02/2009, 17:58
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Respuesta: Me ayudan con esta consulta

Hola tu tabla quedaria mejor asi:

Código PHP:
CREATE TABLE IF NOT EXISTS `posts` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
nombretext NOT NULL,
  `
mensajetext NOT NULL,
  `
nicktext NOT NULL,
  `
avatartext NOT NULL,
  `
categoriatext NOT NULL,
  `
puntosint(11NOT NULL,
  `
lockvarchar(3) DEFAULT NULL,
  `
no_commvarchar(3) DEFAULT NULL,
  `
lecturaslongtext NOT NULL,
  `
tagsvarchar(100NOT NULL,
  `
id_usuarioint(11NOT NULL,
  `
fechadatetime NOT NULL,
  `
post_numerovarchar(255NOT NULL,
  
PRIMARY KEY  (`id`),
   
FULLTEXT KEY `busqueda`(
  `
nombre` ,
  `
mensaje`
  )
TYPE MYISAM 
y tu busqueda asi:

Código PHP:
//CUENTA EL NUMERO DE PALABRAS
$busqueda $_GET['search'];
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if (
$numero==1)
{
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
    
    
$resultado="SELECT * FROM posts WHERE  nombre LIKE  '%$busqueda%' OR mensaje LIKE  '%$busqueda%' ORDER BY coincidencias DESC";
    
}
else
{  
    
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
    
    
    
$resultado="SELECT *, MATCH ( nombre, mensaje )AGAINST (  '$busqueda' ) AS resultado FROM posts WHERE MATCH (nombre, mensaje ) AGAINST (  '$busqueda' ) ORDER BY coincidencias DESC";
    


Saludos.
  #28 (permalink)  
Antiguo 24/02/2009, 18:29
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

Uh me sale este error: (para lo que me dijo Triby)

Cita:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FUNCIONA IN BOOLEAN MODE) AS coincidencias FROM posts WHERE MATCH (nombre, mensa' at line 1
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #29 (permalink)  
Antiguo 24/02/2009, 18:38
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: Me ayudan con esta consulta

Seguramente realizaste una busqueda con la palabra FUNCIONA y se te olvido poner la variable entre comillas: '$buscar', si no, haz un echo de la consulta y nos cuentas que es lo que hay:

echo $sql;
__________________
- León, Guanajuato
- GV-Foto
  #30 (permalink)  
Antiguo 24/02/2009, 18:47
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Me ayudan con esta consulta

LO AREGLE!!!!!!

seguramente cuando les diga me van a querer matar XD

( ESTABA MAL CREADO EL INDICE ) :
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
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 20:55.