Esta es tu consulta:
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.