0

希望你一切都好

我很难写一个查询

这是我的问题解释

我有一个数据库表说“jreviews_content”,其中有一个名为“jr_produits”的字段

在“jr_produits”中,数据是格式 *ryan-decosta*tom-gosling* 所以我想要一个基于单词的搜索查询,即如果用户输入“rya”,mysql 不应该返回任何内容,但如果用户输入 ryan那么它应该返回同样的行,如果用户类型“gos”mysql不应该返回任何东西,但是如果用户类型gosling那么它应该返回ryan和gosling是确切单词的行

我正在写的查询是

SELECT *
FROM `jreviews_content`
WHERE jr_produits LIKE '%*ryan-%' or jr_produits LIKE '%-ryan*%' 
or jr_produits LIKE '%*ryan*%' or jr_produits LIKE '%-ryan-%';

我希望以更有效的其他方式完成(通过正则表达式或任何其他方法)

SELECT * FROM `jreviews_content` WHERE jr_produits REGEXP '^[*-]ryan[*-]$'

它不获取任何东西

也没有

SELECT * FROM `jreviews_content` WHERE jr_produits like '%[*-]ryan[*-]%'

请提出一些建议

4

1 回答 1

1

尝试 MySQL 正则表达式单词边界标记。他们记录在本页的一半左右:

SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]]ryan[[:>:]]'

请注意,我今天没有 MySQL 访问权限,因此未经测试。

还要注意@user1032531 所说的话。具有类似值的记录*ryan-decosta*tom-gosling*几乎总是意味着“糟糕的设计”。

于 2013-10-01T12:12:58.240 回答