我有一个带有SQL查询的搜索模块,如下所示:
SELECT FROM trilers WHERE title '%something%'
当我搜索关键字例如“蜘蛛侠”时它返回未找到,但是当我搜索“蜘蛛侠”时它返回我的内容(MySQL中的原始行是“蜘蛛侠”)。
如何忽略所有符号,例如-
,#
,!
,:
,并在同一时间返回带有“spiderman”和“spider-man”关键字的内容时间?
答案 0 :(得分:4)
您可以做的是在搜索之前替换您不关心的字符。
第一次迭代看起来像这样:
SELECT * FROM trilers WHERE REPLACE(title, '-', '') LIKE '%spiderman%'
这会忽略任何' - '。
接下来你会用另一个REPLACE来说明#'#'像这样:
SELECT * FROM trilers WHERE REPLACE(REPLACE(title, '-', ''), '#', '') LIKE '%spiderman%'
对于所有3个(&#39;!&#39;,&#39; - &#39;,&#39;#&#39;)您只需将替换为另一个替换,如下所示:< / p>
SELECT * FROM trilers WHERE REPLACE(REPLACE(REPLACE(title, '-', ''), '#', ''),'!','') LIKE '%spiderman%'
答案 1 :(得分:1)
您可以尝试类似
的内容 <div class="col-md-12 col-sm-12 col-xs-12 nopadding" style="margin-bottom: 15px; position: relative;">
<img src="assets/img/klupa_fontana.jpg" class="img-fluid">
<div style="position: absolute; top: 10%; left: 50%; transform: translate(-50%, -50%);">
<span style="color: #fff; font-size: 60px; line-height: 1.07143; font-weight:400;"> Lorem ipsum dolor</span><br><br>
</div>
<div class="col-md-6 col-sm-12 col-xs-12">
<div style="position: absolute; top: 15%; left: 2%;">
<span style="color: #fff; font-size: 50px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor.</span><br><br>
<span style="color: #fff; font-size: 40px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor.</span>
</div>
</div>
<div class="col-md-6 col-sm-12 col-xs-12">
<div style="position: absolute; top: 15%; right: 2%; text-align: right">
<span style="color: #fff; font-size: 50px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor <br> fast and safe.</span><br><br>
<span style="color: #fff; font-size: 40px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor</span>
</div>
</div>
</div>
答案 2 :(得分:0)
涉及使用REPLACE
的其他答案很棒,但如果您不在乎“蜘蛛”和“男人”之间出现的字符或两个字符串之间有多少个字符,则可以使用额外的表达式中的通配符:
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider%man%';
如果您只想匹配一个字符,但允许任何字符,则可以使用仅匹配一个字符的_
wildcard:
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider_man%';
这将匹配“spideryman”和“la la land”中的“蜘蛛侠”,而不是“spiderysupereliteuberheroman”。
如果您的可能符号数量有限,那么在没有REPLACE
的情况下执行此操作的方法是使用析取表达式:
SELECT * FROM Superheroes WHERE
HeroName LIKE '%spiderman%'
OR
HeroName LIKE '%spider-man%'
OR
HeroName LIKE '%spider#man%'
OR
HeroName LIKE '%spider!man%';
答案 3 :(得分:0)
WHERE trilers REGEXP '[[:<:]]spider[-#!:]?man[[:>:]]'
一些讨论:
[[:<:]] -- word boundary
[-#!:] -- character set, matches any of them. ('-' must be first)
[-#!:]? -- optional -- so that 'spiderman' will still match
与其他答案不同,这将避免匹配
spidermaniac
另外,请考虑使用FULLTEXT
。
答案 4 :(得分:-1)
您应该能够通过小更新来使用搜索。您应该可以执行以下操作:SELECT FROM trilers WHERE title LIKE'%spider%'。这应该搜索蜘蛛在其他东西之前或之后的任何东西,如连字符( - )