2017-03-15 60 views
1

我有一个名为BIO的表,有一些生物学描述,我想在mysql中查询关键字。 例如,我想查询“LTR”,所以我使用的代码:如何实现一个关键字在MySQL中搜索特定的单词?

select * from BIO where info LIKE '%LTR%'; 

其结果是:

id info 
1 Adenylate isopentenyltransferase  
2 Glycosyltransferase   
3 LTR element 
4 Non-LTR retroelement 
5 Putative non-LTR 
6 Histone LTR element 

我也用作另一个问题(How to implement a Keyword Search in MySQL?)建议避免一些问题:

SELECT * FROM BIO WHERE info LIKE CONCAT('%','LTR','%'); 

而结果是一样的。

我不希望像前两行的结果,例如: 糖基 ansferase

我想有:

id info 
3 LTR element 
4 Non-LTR retroelement 
5 Putative non-LTR 
6 Histone LTR element 

是如何做到的最好方式它?

回答

1

这有点棘手。但对于你的例子,以下将起作用:

select * 
from BIO 
where concat(' ', replace(info, '-', ' '), ' ') LIKE '% LTR %'; 

什么是逻辑?它在info的开头和末尾放置一个空格,并用空格替换所有连字符。对于你的问题中的例子,你想要的LTR的出现将是“LTR”。

注意:您也可以使用正则表达式来做同样的事情。但是,在字符串的开始和结尾处使用边界和匹配是很棘手的。

+0

很棒的建议。是否有可能添加到这个查询也获得“组蛋白/ LTR”或“LTR /任何东西”?我忘了在我的问题中包括这个。 – Paul

+1

它与这一个 - 选择*从BIO哪里concat('',REPLACE(REPLACE(info,' - ',''),'/',''),'')LIKE'%LTR%'; – Paul