我正在使用下面的sql查询来查询db的搜索值,但是当我搜索“ study”时,它也会返回值“ caese-study”,“ get-study-materials”。 如何使用查询来搜索包含字符串列的确切包含内容?
$ names ='study'; 并且名称列具有类似逗号分隔的值, 例如:“研究,abc,新内容”,所以我也需要在其中进行搜索
SELECT * FROM datatitle WHERE names LIKE '%$names %' ;
SELECT * FROM datatitle WHERE names regexp '(^|[[:space:]])$names([[:space:]]|$)';
我尝试了上述两个查询,但没有按预期工作,请咨询吗?
答案 0 :(得分:2)
您不应在列中存储逗号分隔的值。您应该使用联结/关联表。如果可以的话,您应该修复数据模型。
但是,有时我们无法控制其他人的错误决定。 MySQL具有find_in_set()
:
SELECT dt.*
FROM datatitle dt
WHERE find_in_set(?, names) > 0;
请注意,我已用参数替换了常量$names
。您应该学习使用参数将值传递给查询。