Tengo una columna campaign_name y el usuario puede escribir y buscar aumentar la palabra clave de cadena sensible. Por ejemplo, ingresaron "adopt a patient". Pero dentro de mi mesa el campaign_name: tengo "adopt-a-patient"

+----------------
|campaign_name  |
+----------------
|adopt-a-patient|
-----------------
select * from campaign where campaign_name LIKE '%adopt a patient%';
return ZERO result

Mi colación campaign_name ya está configurada en utf8_general_ci. Pero si los usuarios ingresaron exactamente la palabra "adopt-a-patient", el resultado regresó como se esperaba.

Cualquier ayuda sería muy apreciada. De todos modos, lo estoy implementando en la aplicación django. Solo lo estoy depurando dentro de HeidiSQL.

0
d'reaper 3 oct. 2019 a las 14:00

3 respuestas

La mejor respuesta

Quizás reemplazar los espacios con '%' haría lo que quieras:

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '%'), '%')

Nota: Esto permite cadenas de cualquier longitud. Si desea permitir solo un carácter, use '_' en su lugar:

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '_'), '%')
1
Gordon Linoff 3 oct. 2019 a las 11:01

Tiene tres palabras en el filtro de búsqueda: "ADOPTAR", "A", "CAMPAÑA". Es posible que desee hacer una de estas dos cosas:

1) busca todas las filas que coincidan con al menos una palabra

SELECT * FROM campaign 
WHERE (campaign_name LIKE '%adopt%') OR (campaign_name LIKE '%a%')
OR (campaign_name LIKE '%patient%);

(debería ser mejor considerar solo palabras de más de 2 caracteres)

2) busca todas las filas que coincidan con las tres palabras:

SELECT * FROM campaign 
WHERE (campaign_name LIKE '%adopt%') AND (campaign_name LIKE '%a%')
AND (campaign_name LIKE '%patient%);

Si desea que las palabras buscadas estén en cualquier orden
o

SELECT * FROM campaign WHERE (campaign_name LIKE '%adopt%a%campaigne%');

Si desea que las palabras buscadas estén en el orden en que fueron escritas.

0
Feacio 3 oct. 2019 a las 11:29

Use % entre para obtener un resultado perfecto

select * from campaign where campaign_name LIKE '%adopt%a%patient%';
0
sachin dubey 3 oct. 2019 a las 11:08
58217752