我试图比较来自包含破折号的网址字符串的标题,例如:
Learning-Programming-Together-With-StackOverflow
我的数据库记录,其中包含:
Learning Programming Together With StackOverflow
或
Learning-Programming Together With StackOverflow
现在,我不确定如何/哪些 regex
与SQL查询一起使用,以匹配上面的数据库记录。
因此,当我使用破折号提供 URL字符串时,SQL正则表达式查询与我的数据库记录匹配的内容是什么?
我正在考虑尝试以下SQL查询:
$sql = $this->db->conn->prepare("
SELECT
title
FROM
video
WHERE
title REGEXP :title
LIMIT 1
");
$sql->execute( array(
':title' => $title,
) );
但我完全不确定如何将其与匹配破折号的regex
/([-])/g
结合使用?
请帮忙/建议吗?
答案 0 :(得分:1)
为什么不
$sql = $this->db->conn->prepare("
SELECT
title
FROM
video
WHERE
REPLACE(title, ' ', '-') = REPLACE(:title, ' ', '-')
LIMIT 1
");
$sql->execute( array(
':title' => $title,
) );
或者$title
可以在php中完成替换。
答案 1 :(得分:1)
您可以在向MySQL查询提供字符串之前应用preg_replace
:
':title' => preg_replace('/[ -]+/', '', $title),
并在您的查询中使用它:
REPLACE(REPLACE(title, ' ', ''), '-', '')
基本上,想法是在比较之前从两边删除所有连字符和空格。