0

我有一个查询如下:

$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, '[]%')");

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

谢谢!

4

2 回答 2

1

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

于 2013-06-19T14:03:53.140 回答
0

我会为此使用正则表达式:

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

这将检查(字符串或标点符号或空白的开头)后跟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 Fiddle 。

于 2013-06-19T14:11:35.447 回答