如何编写(MySQL)查询以查找包含从url查询字符串获得的值的列的行?
我可以做SELECT * FROM table WHERE column LIKE %tag%
,当标签是单个单词时,这很好。但是我想支持由多个单词组成的标签。
要使我的网址更美观,我要去除某些字符,并用破折号代替空格。例如,当从URL中将“ Stack Overflow”之类的标记作为查询字符串检索时,将变成“ stack-overflow”。
支持标点符号为“ 17/18”的标签也可以转换为“ 17-18”或“怎么回事”呢?它将转换为“如何进行”,或将“电影2:复仇”转换为“电影2-复仇”。
我想不出办法。我是否需要为我的标签添加诸如永久链接列之类的东西,并使用该列存储经过网址转换的标签?
答案 0 :(得分:0)
一种可能的方法(在标记的永久链接列旁边)是在“列”列上具有全文索引,并使用全文搜索,将所有破折号替换为空格:
$search = str_replace('-', ' ', $tag);
$sql="SELECT * FROM table WHERE MATCH(column) AGAINST('$search')";
或者,使用准备好的语句:
$sql="SELECT * FROM table WHERE MATCH(column) AGAINST(?)";
答案 1 :(得分:0)
如果表属性包含多个单词,您甚至可以尝试从表属性中获取完美标签。
SELECT * FROM table WHERE column REGEXP "[[:<:]]tag[[:>:]]"