【发布时间】:2021-12-17 18:58:27
【问题描述】:
我正在尝试在 php 和数据库服务器 mysql 中创建“按字母过滤”功能。
表;
+-----+---------------------+
| nid | title |
+-----+---------------------+
| 1 | Home and Services |
| 2 | Health and services |
| 3 | Health and Medical |
| 4 | Health and Allergy |
| 5 | Stroke Services |
+-----+---------------------+
但我想过滤掉“和”“服务”等常用词。因此,例如,如果用户按字母“S”进行过滤,它应该返回“Stroke Services”,但应该排除“Home and Services”和“Health and services”。
我怎样才能做到这一点?这是我当前的查询;
SELECT nid,title FROM node_field_data WHERE BINARY title LIKE "%S%%" AND BINARY title NOT LIKE "%Services%";
但它也排除了“中风服务”。请帮忙。
【问题讨论】:
-
坐下来想想你的过滤器应该做什么。写下来。最后,将其转换为 SQL 查询。
-
Regexp_like 可能会帮助你。与常规类似的 SQL 模式匹配并不是那么好。
NOT LIKE "%Services%"也应该类似于NOT LIKE "%and _ervices%"- 我不确定这是否可行 -
设计一个过滤条件有点困难,有时你想排除某个词,但在其他情况下你想包含它。此外,您当前的方法要求您为每个排除标准手动设计模式(或模式组合)。我不认为这是可持续的。您可能需要查看布尔全文搜索并提供停用词列表。
-
为什么不创建一个包含该字符串“允许”部分的列,并在更改
title列时对其进行更新?这可以使查询更容易过滤行