Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Sistema de busqueda por selects

Estas en el tema de Sistema de busqueda por selects en el foro de Mysql en Foros del Web. -Hola estoy asiendo una busqueda por select y no sale uso match against y alter table este es el ejemplo pero no me esta resultando. ...

  #1 (permalink)  
Antiguo 30/12/2010, 12:29
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Busqueda Sistema de busqueda por selects

-Hola estoy asiendo una busqueda por select y no sale uso match against y alter table este es el ejemplo pero no me esta resultando.

Código PHP:



mysql_query
("    ALTER TABLE $bd_tabla ADD FULLTEXT(name1,name2,name3,name4)"); 





$query=" SELECT SQL_CALC_FOUND_ROWS name1,name2,name3,name4 MATCH (name1,name2,name3,name4) AGAINST ('%{$_GET['tipo4_name']}%','%{$_GET['tipo1_name']}%','%{$_GET['tipo3_name']}%','%{$_GET['tipo2_name']}%') AS Score FROM $bd_tabla WHERE MATCH (name1,name2.name3,name4) AGAINST ('%{$_GET['name1']}%','%{$_GET['name2']}%','%{$_GET['name3']}%','%{$_GET['name4']}%')"
  #2 (permalink)  
Antiguo 30/12/2010, 12:41
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Sistema de busqueda por selects

esta demás decir que es un tema de SQL no de PHP ..
espera mientras transfieren tu tema
  #3 (permalink)  
Antiguo 30/12/2010, 13:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a Mysql
  #4 (permalink)  
Antiguo 31/12/2010, 08:49
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-Osea lo moveran de nuevo? que error entonces , supongo que desconocen la idea aqui de esto , tendre que repetir el tema en php espero no lo cambien a mysql otra vez para nada.
  #5 (permalink)  
Antiguo 31/12/2010, 09:13
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

Una duda: ¿Nunca te surge el impulso de buscar en el manual de referencia, cuando algo no funciona?
No es qe vayas a encontrar todas las respuestas, pero al menos encontrarías una guía.

Por lo que dice el manual (12.7.3. Limitaciones de las búsquedas de texto completo (Full-Text)) el argumento que se debe usar en AGAINST() debe ser una cadena de texto, y en tu caso no lo es. Estás poniendo un conjunto de campos:
Código MySQL:
Ver original
  1.   name1,
  2.   name2,
  3.   name3,
  4.   name4
  5.   MATCH (name1,name2,name3,name4)
  6.   AGAINST ('%{$_GET['tipo4_name']}%','%{$_GET['tipo1_name']}%','%{$_GET['tipo3_name']}%','%{$_GET['tipo2_name']}%') AS Score
  7. FROM $bd_tabla
  8.   MATCH (name1,name2.name3,name4)
  9.   AGAINST ('%{$_GET['name1']}%','%{$_GET['name2']}%','%{$_GET['name3']}%','%{$_GET['name4']}%')
Habría que ver si eso es lo que genera la falta de respuesta, pero para estar seguro deberías capturar el error de MySQL... cosa que no estás haciendo.

Prueba capturar el error devuelto, si lo hay. Eso te puede dar mejores pistas.

Y ten paciencia... Estamos a fin de año y la mayoría está haciendo algo por eso.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 31/12/2010, 09:30
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-no se por que en el servidor pongo mysql error y no me lo devuelve , que cosa otra vez irme a local para resolver esto vaya por dios.
  #7 (permalink)  
Antiguo 31/12/2010, 09:34
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

¿Que pones qué?
Yo estoy diciendo que captures el error desde el mismo PHP donde lo ejecutas... No que lo corras en consola.

o sea, algo como:
Código PHP:
$result mysql_query($query$db) or die(mysql_error()); 
eso o algo semejante que permita saber si está devolviendo algo realmente o bien si se está ejecutando la sentencia en sí.

Otra opción, práctica, es usar el phpMyAdmin y probar una consulta parecida manualmente, con valores fijos, y ver si la sintaxis corre bien. Si la puede ejecutar, entonces el error está en el PHP y no en el MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 31/12/2010, 09:39
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

Hola ermano ,aqui esta el error mysql mira :

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 ''%%','%2010%','%%')' at line 1
  #9 (permalink)  
Antiguo 31/12/2010, 09:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sistema de busqueda por selects

Yo tampoco veo claro el uso de % dentro de AGAINST en ninguno de los dos, ni para nombre de campo, ni para término buscado; no se trata de un LIKE, no lo olvides, por lo que con eso no te encontrará nada. Tampoco entiendo el uso de SELECT SQL_CALC_FOUND_ROWS, si no estás controlando con LIMIT, aunque eso no creo que te cause problema. Y creo que te falta un ORDER BY score al final. Respecto al alter table, si lo has hecho ya y has creado el índice, no es necesario recrearlo cada vez que lanzas la consulta. Respecto a las palabras buscadas, no sé por qué necesitas cuatro términos. Piensa que una cadena como esta: 'estas palabras buscadas resultan raras' te buscará los 5 términos en el índice que has creado con los cuatro campos.
  #10 (permalink)  
Antiguo 31/12/2010, 09:44
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

Captura la sentencia completa tal como está armada, es decir:
Código PHP:
$result mysql_query($query$db) or die(mysql_error()."\n".$query); 
De ese modo, no solamente obtendrás el mensaje de error sino también la sentencia que lo provocó.

Nota: el "\n" encadenado es simplemente para que la sentencia salga una línea más abajo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 31/12/2010, 09:48
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

De todos modos por lo que alcanzo a ver del mensaje de error, no me diste ni una pizca de bolilla cuando dije que el AGAINST() debe contener una sola cadena y no un conjunto de cadenas, ¿verdad que no?



Ni lo probaste...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 31/12/2010, 09:55
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

ah Esto es un desastre mira lo que sale :


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 ''%%','%%','%%') AS Score FROM tabla
WHERE MATCH (name1,nam' at line 1 SELECT SQL_CALC_FOUND_ROWS name1,name2,name3,name4 MATCH (name1,name2,name3,name4) AGAINST ('%%','%%','%%','%%') AS Score FROM tabla WHERE MATCH (name1,name2,name3,name4) AGAINST ('%%','%%','%%','%%') ORDER BY Score




Eh, usado estos terminos de busqueda y nada de nada. creo que las e usado todas ya no me queda obcion.


#$result = mysql_query( "SELECT * from tabla WHERE name1,name2,name3,name4 LIKE '%{$_GET['palabra']}%' ");


#$result = mysql_query( "SELECT * , MATCH(name1,name2,name3,name4) AGAINST ('%{$_GET['palabra']}%') as Score FROM tabla WHERE MATCH(name1,name2,name3,name4) AGAINST ('%{$_GET['palabra']}%') ORDER BY id_sql ");


ya nose que mas hacer.
  #13 (permalink)  
Antiguo 31/12/2010, 10:02
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

si lo prove el conjunto de cadenas y con una sola cadena , eh provado ya tantas posibilidades que quizas alla pasado por alto la respuesta pero te digo creeme eh echo mucho y si lo prove.
  #14 (permalink)  
Antiguo 31/12/2010, 10:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sistema de busqueda por selects

Lanza esta consulta directamente en la base, no a través de PHP, y en lugar de palabras buscadas texto difícil, escribe las cuatro palabras que quieras buscar. Olvídate ahora de PHP y de variables. Primero veamos si hay algún problema de base de datos.

SELECT name1, name2, name3, name4 MATCH (name1,name2,name3,name4) AGAINST ('palabras buscadas texto difícil') AS Score FROM nombretutabla WHERE MATCH (name1,name2.name3,name4) AGAINST ('palabras buscadas texto difícil') ORDER BY Score
  #15 (permalink)  
Antiguo 31/12/2010, 13:16
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

ya lo probe y nada sigue igual ,que dificil esto un mes con lo mismo.
  #16 (permalink)  
Antiguo 31/12/2010, 22:09
Avatar de 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, 4 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)
  #17 (permalink)  
Antiguo 01/01/2011, 10:55
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-ya esta dejemoslo aqui no seguiremos mas con esto,santo cielo.
  #18 (permalink)  
Antiguo 02/01/2011, 04:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sistema de busqueda por selects

¿Y no será que estás usando un motor InnoDB y no uno MyIsam? Mira a ver si es eso. Para usar índices full-text, el motor de la base debe ser MyIsam.
  #19 (permalink)  
Antiguo 02/01/2011, 06:17
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

A mi me intriga esto que está en el post nro. 12:
Código MySQL:
Ver original
  1. 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 ''%%','%%','%%') AS Score FROM tabla
  2. WHERE MATCH (name1,nam' at line 1 SELECT SQL_CALC_FOUND_ROWS name1,name2,name3,name4 MATCH (name1,name2,name3,name4) AGAINST ('%%','%%','%%','%%') AS Score FROM tabla WHERE MATCH (name1,name2,name3,name4) AGAINST ('%%','%%','%%','%%') ORDER BY Score
Según nos muestra la sentencias de PHP usada:
Código PHP:
#$result = mysql_query( "SELECT * , MATCH(name1,name2,name3,name4) AGAINST ('%{$_GET['palabra']}%') as Score FROM tabla WHERE MATCH(name1,name2,name3,name4) AGAINST ('%{$_GET['palabra']}%') ORDER BY id_sql "); 
el bloque AGAINST ('%%','%%','%%','%%') proviene de $_GET['palabra'], lo que implica que está metiendo un error de sintaxis dentro del SQL a través del contenido de una variable.

Creo que todo el conjunto está mal programado, porque no ha depurado correctamente el uso de SQL embebido en PHP, porque no revisa bien lo que pone en las variables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 02/01/2011, 06:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sistema de busqueda por selects

gnzsoloyo,
lo está metiendo en el PHP, pero no parece que lo incluya en la variable el usuario, porque aparecería dos veces, si es que, como creo, sigue lanzando la consulta desde ese archivo PHP, donde sí lo añade en programación. Aquí puede verse.
AGAINST ('%{$_GET['name1']}%','%{$_GET['name2']}%','%{$_GET['name3']}%','%{$_GET['name4']}%')";

Yo no usaría ese archivo php ahora.
  #21 (permalink)  
Antiguo 02/01/2011, 06:34
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

Estoy de acuerdo.
La consulta en sí no parece tener problemas de sintaxis, si eliminamos lo aportado por variables, por lo que lo que debe depurar es lo que hace en PHP
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 02/01/2011, 17:57
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

Cita:
Creo que todo el conjunto está mal programado, porque no ha depurado correctamente el uso de SQL embebido en PHP, porque no revisa bien lo que pone en las variables.

-Entonces como es?
  #23 (permalink)  
Antiguo 02/01/2011, 18:19
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

La respuesta ya te la hemos dado:

1) El SELECT, una vez creado tiene que respetar ciertas reglas de sintaxis, entre las que se halla que el contenido de AGAINST() debe ser una única cadena de texto.

2) Si envías varios valores a buscar dentro del AGAINST, esos valores deben quedar en una sola cadena, cosa que puedes resolver en el PHP por programación (ése es un problema que debes resolver tu), o bien en el SQL por medio de un CONCAT(), como ya te mostré.

3) Si estás definiendo las tablas como InnoDB, eso es un error de definición, porque FULLTEXT sólo opera con MyISAM.

No hay otras alternativas.

Lo que sea PHP, es tema que debes resolver en el Foro de PHP, aquí sólo se trata de SQL y bases de datos. No te podemos indicar mucho sobre el asunto por normas del foro.
En cuanto a la sentencia SQL en sí, salvo los valores que llegan por variable, no tiene errores, así que debería funcionar, en cuanto revises la forma en que los datos llegan de las variables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 02/01/2011, 18:54
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

myisam ? eso es phpmyadmin o que es eso ?

tambien me di cuenta que se me crearon mas de un alter table tengo 43 y estoy eliminandolas una por una , ¿hay alguna forma de eliminarlas mas rapidamente?
  #25 (permalink)  
Antiguo 02/01/2011, 21:39
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

No, phpfan, cuando hablas de bases de datos nunca estás hablando de phpmyadmin. El phpmyadmin es una interfase web para administrar los recursos de MySQL, pero el MySQL es independiente del phpmyadmin. De hecho, para usar MySQL ni siquiera necesitas el phpmyadmin (yo administro los recursos en PHP de una web y en realidad jamás uso el phpMyAmin).

Respecto a las tablas MyISAM, mi recomendación sería que vayas de vuelta al principio y leas los fundamentos de MySQL, porque si no sabes lo que es el motor MySAM, entonces lo que te está faltando es demasiado y así nuestros consejos sólo lograrán confundirte más.

Cita:
tambien me di cuenta que se me crearon mas de un alter table tengo 43 y estoy eliminandolas una por una , ¿hay alguna forma de eliminarlas mas rapidamente?
Este es un ejemplo de lo que digo. ¿Me quieres explicar para qué estas alterando la estructura de las tablas? Un diseño de tablas no debe ser modificado porque sí. Un diseño de bases de datos es algo que debe ser fijo, o sufrir mínimas alteraciones en el transcurso del trabajo. Crear, alterar y/o destruir tablas con liviandad es una pésima práctica que solamente lleva a perder el control de la estructura de la base.

¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 03/01/2011, 00:23
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-Use alter table de php para conseguir el full text , nose en que momento se repitió tantas veces ese alter table pero así fue , lastima que ahora deba borrar una por una y es lo que te preguntaba si podia quitarlas y 1 dejar una sola por que phpmyadmin en esa función no tiene los checkboxes para seleccionarlos.


-Por otro lado gracias por decirme esto de phpmyadmin ya lo sospechaba por el manual de mysql pero yo no ando por esa area me estoy concentrando en php y sigo en la búsqueda de este select search full text que no consigo de ninguna manera muchas webs lo tiene y a mi no me sale e seguido todos los ejemplos y ando por el mismo camino .
  #27 (permalink)  
Antiguo 03/01/2011, 02:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sistema de busqueda por selects

Si te preguntas por qué tienes tantos índices full-text, mira esto que escribes en el primer post:
mysql_query("ALTER TABLE $bd_tabla ADD FULLTEXT(name1,name2,name3,name4)");

cada vez que lanzas el script para buscar algo añades un índice full-text. Como te dice gnzsoloyo, eso no es una buena idea. Borra esa línea del script. Deja un sólo índice en la base y comienza a hacer pruebas siguiendo las recomendaciones que has recibido de gnzsoloyo, pero antes comprueba qué clase de motor estás usando.
  #28 (permalink)  
Antiguo 03/01/2011, 14:56
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-Nose mirar el motor de busquda no tengo ni idea
  #29 (permalink)  
Antiguo 03/01/2011, 16:24
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

No es un motor de búsqueda. Eso es otra cosa.

Vamos por partes:
MySQl, a diferencia de otros DBMS (DataBase Management System) no posee una sola forma de construir y administra tablas, sino que tiene varios. Cada uno de estos modos de crear tablas requiere de subsistemas de software que se denominan "motores de tablas", ya que esa es su función: Administrar el sistema de tablas. Algunos han sido desarrollados por ellos sobre la base de otros estándares, otros son licenciados.
Entre los motores desarrollados por MySQL está el MyISAM, basado en ISAM, que son tablas rápidas, eficientes y fáciles de administrar a la hora de implementar bases de datos en Web, pero no tienen soporte de restricciones de clave foránea, tienen cierto límite de longitud (definido por sistema operativo, y tampoco soportan transacciones (ACID).
El motor MyISAM era el motor por default hasta la versión 4.x.
En MySQL 4.x ya venía otro motor de tablas denominado InnDB que si tiene soporte de transacciones y restricciones de clave foránea, pero ese mismo InnoDB hay dos cosas que no puede implementar (restricciones propias de su diseño): Los índices FULLTEXT y los SPATIAL, por lo que no se puede usar MATCH(...) AGAINST(...) con ese tipo de tablas, a pesar de ser muy buenas para todos los demás usos.
El motor InnoDB es el motor por default desde la versión 5.0.x.

¿Cómo saber si tienes habilitado uno o el otro?
Simplemente ejecutando:
Código MySQL:
Ver original
  1. mysql> SHOW ENGINES;
  2. +------------+---------+----------------------------------------------------------------+
  3. | Engine     | Support | Comment                                                        |
  4. +------------+---------+----------------------------------------------------------------+
  5. | MyISAM     | YES     | Default engine as of MySQL 3.23 with great performance         |
  6. | MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      |
  7. | InnoDB     | DEFAULT | Supports transactions, row-level locking, and foreign keys     |
  8. | BerkeleyDB | NO      | Supports transactions and page-level locking                   |
  9. | BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) |
  10. | EXAMPLE    | NO      | Example storage engine                                         |
  11. | ARCHIVE    | YES     | Archive storage engine                                         |
  12. | CSV        | NO      | CSV storage engine                                             |
  13. | ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables                 |
  14. | FEDERATED  | YES     | Federated MySQL storage engine                                 |
  15. | MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
  16. | ISAM       | NO      | Obsolete storage engine                                        |
  17. +------------+---------+----------------------------------------------------------------+
  18. 12 rows in set (0.00 sec)

Como puedes ver, este SHOW ENGINES devuelve una tabla de tres columnas. La primera te da el nombre del motor, la segunda columna te dice qué motores están activos y cuál es el motor por default, y la tercera te da una breve descripción de las capacidades.

Todas estas cosas y otras muchas se encuentran y aprenden leyendo el manual de referencia. Los tutoriales son muy limitados respecto a este tipo de cosas, ya que el objetivo de ellos es enseñar a hacer consultas y no a conocer el MySQL a fondo.

Finalmente, si quieres probar si tu versión de MySQL funciona bien, usa el phpMyAdmin y ejecuta sucesivamente la misma secuencia que yo usé en mi prueba:

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS articles;
  2.  
  3. CREATE TABLE articles (
  4.   title VARCHAR(200),
  5.   body TEXT,
  6.   FULLTEXT (title,body)) engine = MyISAM;
  7.  
  8. INSERT INTO articles (title,body) VALUES
  9.   ('MySQL Tutorial','DBMS stands for DataBase ...'),
  10.   ('How To Use MySQL Well','After you went through a ...'),
  11.   ('Optimizing MySQL','In this tutorial we will show ...'),
  12.   ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
  13.   ('MySQL vs. YourSQL','In the following database comparison ...'),
  14.   ('MySQL Security','When configured properly, MySQL ...');
  15.  
  16. SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('%database%');
  17.  
  18. SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('%%');
  19.  
  20. SELECT * FROM articles
  21. WHERE MATCH (title,body) AGAINST ('%database%','%Never%');

Te tiene que dar exactamente los mismos resultados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/01/2011 a las 16:30
  #30 (permalink)  
Antiguo 03/01/2011, 18:43
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sistema de busqueda por selects

-Asi esta claro que funciona perfectamente se entiende a la perfeccion y se a que te refieres y esta todo en orden , el caso es que la busqueda con varios select en un form consulta name 1 consulta 2 3 y 4 y todas estas haran refencia a un resultado similar a estos 4 criterios de busqueda , como puede ser el nombre un año un perro una casa y devolvera el mas parecido.

-Lo cual son varios GET por la url 4 serian en este caso , no uno como muestra : ('%database%')

Etiquetas: selects, sitemap, busquedas
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 17:12.