使用REGEX查询而不遵守单词的顺序

时间:2014-07-23 16:42:57

标签: mysql sql regex pdo

首先,我想原谅我可能在我的文本中出现的任何英语错误,事实上它不是我的母语所以它并不是真正的完美...无论如何: 我正在使用搜索标签表,其中包含所有搜索标签及其所属的唯一名称。对于实际的搜索查询,我使用REGEXP(查询以PDO样式编写)。用户必须输入用逗号分隔的搜索关键字。 当我执行几个测试时,我注意到显示的结果取决于单词中输入的顺序以及搜索标签存储在seach标签表中的顺序。

我的问题是:如何使用REGEXP执行查询,而忽略了单词的顺序?

到目前为止,实际的查询非常简单:

$search = explode(',', htmlentities($_POST["search"]));
$search = implode('|', $search);

$stmt = $db->prepare("SELECT name FROM blablabla WHERE name REGEXP :search");
$stmt->bindValue(":search", $search, PDO::PARAM_STR);

谢谢!

1 个答案:

答案 0 :(得分:1)

我很抱歉,但我不知道,这是否可行,至少是以一种高效的方式。 我会尝试这样做:

$search = explode(',', htmlentities($_POST["search"]));

$sql = 'SELECT name FROM blablabla ';
$query = array();
$parts = array();

foreach($search as $value) {
    $query[] = 'name LIKE ?';
    $parts[] = '%' . $value . '%';
}

$sql .= ' WHERE ' . implode(' OR ', $query); //Or use logical AND. Just what suits you
$stmt = $pdo->prepare($sql);
$stmt->execute($parts);