使用带有破折号的字符串的正则表达式的SQL查询

时间:2014-03-15 17:50:19

标签: php mysql sql regex

我试图比较来自包含破折号的网址字符串的标题,例如:

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结合使用?

请帮忙/建议吗?

2 个答案:

答案 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, ' ', ''), '-', '')

基本上,想法是在比较之前从两边删除所有连字符和空格。