Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/05/2013, 04:24
matake
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Excluir palabras de una consulta

Cita:
Iniciado por jurena Ver Mensaje
La idea es esta , pero no he probado nada.

Código MySQL:
Ver original
  1. SELECT mi_id FROM mi_tabla
  2.     WHERE mi_columna REGEXP '([[:<:]]".$mi_busqueda.")' AND $mi_busqueda NOT IN ('palabra1', 'palabra2', 'palabra3')
Código MySQL:
Ver original
  1. SELECT mi_id FROM mi_tabla
  2.     WHERE mi_columna REGEXP '([[:<:]]".$mi_busqueda.")'  AND mi_columna NOT REGEXP 'palabra1|palabra2|palabra3';

Pero no sé por qué necesitas usar expresiones regulares para eso si quizás no es necesario y las expresiones no son muy eficientes. Esta sería la idea
Código MySQL:
Ver original
  1. SELECT mi_id FROM mi_tabla
  2.     WHERE mi_columna LIKE '@mi_busqueda%' AND @mi_busqueda NOT IN ('palabra1', 'palabra2', 'palabra3')
Muchas gracias por responder.
He probado tus sugerencias , estan correctas ( o sea funcionan ) pero ninguna no me da el resultado deseado.

Tambien he leido muchas veces esto que las expresiones regulares son lentas pero no se que otra cosa utilizar para obtener lo mismo pero sin usarlas.

Pongo aqui mi pseudo codigo como ejemplo ( o sea lo que quiero que haga la consulta ) y si tienes alguna sugerencia ... Bienvenida sea

Mis palabras excluidas:
Código:
$palabras_excluidas = array('para','palabra2','palabra3');
Mi busqueda:
Código:
$mi_busqueda='par';
Supongamos que mi_columna contiene las siguientes filas:
Cita:
1. "algo para estar acaparado"
2. "parachoques rotos para coches"
3. "alguien que esta parado"

Algoritmo Condiciones:
Cita:
1. Se comprueba cada palabra de mi_columna (no solo el principio de la frase) si hay palabras que empiezan por "par" descartando las que contiene pero no al principio (ej: "acaparado")

2. Al encontrar palabra que empieza con "par" se compara dicha palabra (palabra entera esta vez ) ej "para" o "paracoches" con el array $palabras_excluidas


3. Si en el punto 2. se encuentran solo palabras excluidas se considera respuesta NO VALIDA y descarta esta fila

4. Si en el punto 2 se encuentran palabras excluidas pero también NO Excluidas se considera respuesta VALIDA y se agrega esta fila a la respuesta

5. Si en el punto 2 se encuentran solo palabras No Excluidas se considera respuesta VALIDA y se agrega esta fila a la respuesta
Mi respuesta deseada es:
que la consulta me devuelva las filas 2 y 3
porque la fila 2 al tener al menos una palabra "parachoques" que empieza por "par" que es $mi_busqueda no la descarte del resultado aunque tenga la palabra "para" que esta en las excluidas

y la fila 3 tiene una palabra "parado" que empieza con "par" aunque no esta al principio de la frase

y que no devuelva la fila 1 porque "acaparado" no empieza por "par" y aunque tiene otra palabra "para" que si empieza por "par" pero esta entre las excluidas y al no tener al menos una palabra valida que empieze por "par" que la descarte del resultado.

Ahora ... no importa la solucion que sea por REGEXP o no o hibrida ... importante seria el resultado.

Espero que se entienden mis dudas

Otra vez gracias por haber ya respondido