Ver Mensaje Individual
  #16 (permalink)  
Antiguo 31/12/2010, 22:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

Bueno, voy a tratar de que se entienda el problema de las limitaciones que te plantee, que el manual indica respecto al contenido del AGAINST(): El AGAINST() no admite que haya grupos de cadenas en él. Sólo pude haber una cadena por vez. Y para demostrarte que sigues metiendo la pata en el mismo punto (ver posts anteriores), vamos a hacer una prueba:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS articles;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> CREATE TABLE articles (
  5.     -> title VARCHAR(200),
  6.     -> body TEXT,
  7.     -> FULLTEXT (title,body)) engine = MyISAM;
  8. Query OK, 0 rows affected (0.01 sec)
  9.  
  10. mysql>
  11. mysql> INSERT INTO articles (title,body) VALUES
  12.     ->  ('MySQL Tutorial','DBMS stands for DataBase ...'),
  13.     ->  ('How To Use MySQL Well','After you went through a ...'),
  14.     ->  ('Optimizing MySQL','In this tutorial we will show ...'),
  15.     ->  ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
  16.     ->  ('MySQL vs. YourSQL','In the following database comparison ...'),
  17.     ->  ('MySQL Security','When configured properly, MySQL ...');
  18. Query OK, 6 rows affected (0.00 sec)
  19. Records: 6  Duplicates: 0  Warnings: 0
  20.  
  21. mysql>
  22. mysql> SELECT * FROM articles
  23.     -> WHERE MATCH (title,body) AGAINST ('%database%');
  24. +----+-------------------+------------------------------------------+
  25. | id | title             | body                                     |
  26. +----+-------------------+------------------------------------------+
  27. |  5 | MySQL vs. YourSQL | In the following database comparison ... |
  28. |  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
  29. +----+-------------------+------------------------------------------+
  30. 2 rows in set (0.00 sec)
  31.  
  32. mysql>
  33. mysql> SELECT * FROM articles
  34.     -> WHERE MATCH (title,body) AGAINST ('%%');
  35. Empty set (0.00 sec)
  36.  
  37. mysql>
  38. mysql> SELECT * FROM articles
  39.     -> WHERE MATCH (title,body) AGAINST ('%database%','%Never%');
  40. ERROR 1064 (42000): 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 ''%Never%')' at line 2
Como puedes ver, el primer SELECT, que contiene una sola cadena, anduvo bien. El segundo también resultó, aunque no se puede visualizar nada porque lo que buscó fue una cadena vacía.
Pero el tercer SELECT falló y se indica que hay un error de sintaxis: En lugar de una cadena de texto, hay dos.

¿Se entiende ahora el problema?

El único modo de poner ambas cadenas en el AGAINST es sin genero una sola con ellas:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM articles
  2.     -> WHERE MATCH (title,body) AGAINST (CONCAT('%database%',' ','%Never%'));
  3. +----+-------------------+------------------------------------------+
  4. | id | title             | body                                     |
  5. +----+-------------------+------------------------------------------+
  6. |  5 | MySQL vs. YourSQL | In the following database comparison ... |
  7. |  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
  8. +----+-------------------+------------------------------------------+
  9. 2 rows in set (0.00 sec)
Espero que con esto te haya quedado claro, y te recalco que te plantee esto dos veces, pero no me diste bolilla...



Espero que esto te sirva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)