首先,我想原谅我可能在我的文本中出现的任何英语错误,事实上它不是我的母语所以它并不是真正的完美...无论如何: 我正在使用搜索标签表,其中包含所有搜索标签及其所属的唯一名称。对于实际的搜索查询,我使用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);
谢谢!
答案 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);