búsqueda de texto completo no encuentra nada

**EDITAR**

ok, encontré el problema, era que la longitud mínima de la palabra para la búsqueda era 4, la cambié a 3, pero ahora solo encuentra los datos de la fila 1 y no los datos de la fila 2 también...

-----pregunta original:----

Tengo una tabla MyISAM en mi phpmyadmin como esta:

table name: `users`
coulmn name: `name`
row 1 data: 'dan'
row 2 data: 'dan252'

(Es solo la parte importante de esto)

ahora el nombre es un campo de índice de texto completo, estoy usando esta consulta:

SELECT * FROM `users` WHERE MATCH(`name`) AGAINST('dan')

pero phpmyadmin devuelve:

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0004 sec )

porque no encuentra nada

*EDITAR*

ok, encontré el problema, era que la longitud mínima de la palabra para la búsqueda era 4, la cambié a 3, pero ahora solo encuentra los datos de la fila 1 y no los datos de la fila 2 también...

preguntado el 11 de junio de 12 a las 19:06

3 Respuestas

MATCH solo funciona en columnas con FULLTEXT indicando Y FULLTEXT la indicación solo funciona en tablas MyISAM.

En segundo lugar, 'dan' es probablemente demasiado corto para usar en un MATCH.

En tercer lugar, si su término de búsqueda coincide con más del 50% de sus filas, el término se considera demasiado común y la búsqueda falla.

Tener una lectura aquí.

Respondido el 11 de junio de 12 a las 20:06

Prueba con esto.

SELECCIONE * DE usuarios DONDE COINCIDIR (nombre) CONTRA ('dan');

Supongo que estás usando apóstrofes para el nombre de la tabla y en MATCH. Esto está mal. Pruébalo y hazme saber si esto funciona.

Respondido el 11 de junio de 12 a las 19:06

Supongo que está tratando de devolver todo con 'dan' en ellos. Podría probar el comando LIKE.

SELECT * FROM users WHERE name LIKE '%dan%'

Eso devolverá 'dan' y 'dan252' y (si estuviera en la tabla) '123dan456'.

También puedes probar

SELECT * FROM users Match(name) AGAINST('+dan*')

Eso debería devolver lo mismo y probablemente sea más eficiente. Si solo está tratando de usar 'dan', utilícelo como dice @Kirishna.

SELECT * FROM users WHERE MATCH (name) AGAINST ('dan')

Respondido el 11 de junio de 12 a las 19:06

quiero usar texto completo no LIKE, el primero devuelve un error de sintaxis y el segundo devuelve un resultado vacío: Dan Barzilay

Tu podrías intentar SELECT * FROM users WHERE CONTAINS(name,"dan") Tomé eso de SQL de Microsoft por lo que puede que no funcione. - Jonathan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.