J'utilise mysql FULLTEXT Search, moteur de table innodb
.
terme de recherche: tom
Comment utiliser mysql FULLTEXT Recherche avec WHERE dans plusieurs champs en utilisant OU?
SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 100 OR category = 200 ORDER BY seeders DESC LIMIT 0, 30
ci-dessus donne requête 550
enregistrements, les enregistrements sont attendus 6
mais si je recherche pour chaque catégorie séparément. recherche dans category 100
SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 100 ORDER BY seeders DESC LIMIT 0, 30
donne 5
records
et la recherche dans category 200
SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND category = 200 ORDER BY seeders DESC LIMIT 0, 30
donne 1
enregistrement.
donc j'attends des enregistrements 6
, en combinant 5 + 1 mais je reçois 550, même les enregistrements qui n'ont pas le mot tom
dedans.
Une autre question, est recherche dans category
ou sub_category
dans la même requête pour mot tom
SELECT * FROM content WHERE MATCH(title) AGAINST('tom' IN BOOLEAN MODE) AND is_enabled = 1 AND sub_category = 101 OR category = 200 ORDER BY seeders DESC LIMIT 0, 30
donne 550
records. les enregistrements attendus sont 6
alors comment puis-je résoudre ce problème?
, il était en quelque sorte évident que vous a dû appliquer un groupement approprié à vos conditions. Puisque le correctif est si trivial, pourquoi ne pas envisager de supprimer complètement cette question? Il n'a aucune valeur pour les futurs lecteurs dans la mention réelle de recherche en texte intégral car il traite principalement de la capacité à construire des requêtes SQL appropriées. – andrews