我的查询如下:
$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, '[]%')");
但这不起作用。我还能尝试什么?
谢谢!
答案 0 :(得分:1)
我不熟悉在LIKE表达式中使用'[]'。我本来会使用concat('% ', shows.name, ' %')
。
答案 1 :(得分:0)
我会使用正则表达式:
WHERE shows.name RLIKE '(^|[[:blank:][:punct:]])er($|[[:blank:][:punct:]])'
这将检查(字符串或标点符号或空白的开头),然后是ER
,后跟(字符串或标点符号结束或空白)。我用这些正值来测试它并且它起作用了:
它还保留了Another show
和err, 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。