2009-06-22 7 views
4

J'ai une requête MySQLMySQL Recherche Raffinement (remplacement à long regex avec sous-requête)

select query from HR_Health_Logs where query REGEXP 'CPU|MAC|PC|abacus|calculator|laptop|mainframe|microcomputer|minicomputer|machine'; 

Sauf que l'expression régulière est beaucoup plus longue et contient de nombreux synonymes et fautes d'orthographe.

Je dois couper ce court et avoir une table avec tous les synonymes et fautes d'orthographe, de sorte que je puisse éviter cette requête très longue. Je cherche donc quelque chose comme

select query from HR_Health_Logs where query REGEXP '**HAVE A TABLE WITH ALL MY SYNONYMS AND MISSPELLINGS SEARCHED HERE**'; 

Répondre

1
SELECT query 
FROM HR_Health_Logs l, synonym s 
WHERE l.query = s.synonym 
3

Que diriez-vous du ANY function?

select query from HR_Health_Logs where query REGEXP ANY (SELECT spell FROM misspelled WHERE correct = 'masturbate') ; 
+0

a eu un problème avec cela> pourquoi cela vient-il? WHERE correct = 'masturber', fondamentalement n'importe quel mot [syn + misp] sont tous corrects- donc je dois seulement parcourir tous les –

+0

Ma requête a été spécifiquement conçue pour rechercher toutes les requêtes HR_Health_Logs.query qui ont continué les synonymes 'masturbation', parce que je (incorrectement) pensé que c'était votre besoin. Maintenant, si vous voulez juste toutes les correspondances de tous les synonymes, il suffit de supprimer la clause WHERE dans la sous-requête ... Aussi je l'ai nommé mal orthographié, mais cela pourrait être des synonymes. –

+0

Jst un Quick> Quel moteur utilisez-vous pour tester cela? –

0
SELECT query 
FROM HR_Health_Logs 
WHERE query IN (
    SELECT synonym AS query 
    FROM synonyms_table 
    WHERE word = 'masturbation' 
    UNION 
    SELECT misspelling AS query 
    FROM misspellings_table 
    WHERE word = 'masturbation' 
) 

En supposant que vos synonymes et les fautes d'orthographe sont dans deux tableaux distincts. Sinon, vous n'utiliserez qu'une des sous-requêtes et supprimerez l'UNION.

Questions connexes