Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/06/2011, 05:18
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: Como hacer que el buscador no repita los registros

Esta es tu consulta:
Código MySQL:
Ver original
  1. FROM t_modelos
  2. WHERE $campoac LIKE '%{$_POST['palabra']}%' GROUP BY  $campoac ORDER BY RAND()
La consulta en sí misma debería devolver un sólo registro por coincidencia global, es decir, sin importar cuántas veces aparezca en el campo, con una sola coincidencia aparecerá un sólo y único registro.
El problema potencial es que en realidad no estás preguntando por un campo constante, sino que el mismo se indica dinámicamente al crear la sentencia en el PHP. Por lo que dices, infiero que debes estar consultando dos veces la tabla, una vez para comparar contra el título y otra vez por la descripción. Allí está el problema, porque en realidad en PHP estarías combinando el resultado de dos consultas diferentes, cada una de las cuales da el resultado correctamente por si misma, pero no estás verificando al tomar el resultado de la segunda consulta que no estén llegando registros que ya existan en la primera.
Eso es un error de programación, y no de consulta.
Tienes dos formas de resolver la cosa:
- En PHP, lo más simple es que cuando vayas barriendo los registros obtenidos, antes de incorporarlos a la tabla verifiques que el ID del registro que entra no exista ya entre los que se recibieron. Tan simple como eso. ¿Cómo se hace? Eso es tema del Foro de PHP.
- A nivel de MySQL la única forma de comparar un valor dado contra más de un campo al mismo tiempo y sin hacer cosas complicadas, es trabajar con índices FULLTEXT (sólo con tablas MyISAM), donde el índice se defina por todos los campos donde se hará la búsqueda. Es muy eficiente, pero tiene una limitación: Sólo puedes usarlo para buscar palabras completas y no palabras parciales.

Una tercera posibilidad sería crear una sentencia múltiple usando UNION, o bien con un OR condición por cada campo usado, pero eso es un poco más complicado y requiere una programación PHP muy bien hecha.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)