LIKE MySQL搜索周围的空间

时间:2013-06-19 13:59:16

标签: php mysql

我的查询如下:

$stmt = $conn->prepare("
SELECT news_feed.title, shows.name, shows.id, news_feed.news_id 
FROM news_feed 
JOIN shows 
ON news_feed.title 
LIKE concat('%', shows.name, '%')");

基本上它需要我的表格显示(带有电视节目名称),并在另一张桌子上寻找电视节目,标题是从电视新闻来源中删除的。问题是我最近添加了节目'ER',并且任何时候我都有一个包含ER的标题(这是很多头条新闻),它在节目和标题之间建立了联系。 为了避免这个问题,我想捕获由两个空格包围的shows.name。我读了stackoverflow,这样做的一个好方法就是这样的括号:

LIKE concat('%[]', shows.name, '[]%')");

但这不起作用。我还能尝试什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

我不熟悉在LIKE表达式中使用'[]'。我本来会使用concat('% ', shows.name, ' %')

答案 1 :(得分:0)

我会使用正则表达式:

WHERE shows.name RLIKE '(^|[[:blank:][:punct:]])er($|[[:blank:][:punct:]])'

这将检查(字符串或标点符号或空白的开头),然后是ER,后跟(字符串或标点符号结束或空白)。我用这些正值来测试它并且它起作用了:

  • ER
  • 那个ER秀
  • 观看ER!

它还保留了Another showerr, what?

等值

附录:这是完整的查询:

SELECT
  news_feed.title,
  shows.name,
  shows.id,
  news_feed.news_id
FROM news_feed
JOIN shows ON news_feed.title
   RLIKE CONCAT('(^|[[:blank:][:punct:]])', shows.name, '($|[[:blank:][:punct:]])')

有一个SQL小提琴here