结果.php: 现在我的问题是-6ren">
gpt4 book ai didi

php - 如何以最有效的方式使用通配符?

转载 作者:行者123 更新时间:2023-11-30 01:21:12 25 4
gpt4 key购买 nike

我正在开发一个快速搜索条码,它看起来像这样:

搜索栏.php:

<form method="post" action="search.php">
<input type="text" name="search" />
<input type="submit" />
</form>

搜索.php:

<?php
include("config.php");
$search = mysql_real_escape_string($_POST['search']);
$data = mysql_query("SELECT * FROM shop WHERE name LIKE '%$search%' OR id LIKE '%$search%' OR description LIKE '%$search%' OR keywords LIKE '%$search%' ORDER BY id DESC ") or die(mysql_error());
while ($info = mysql_fetch_array($data)) {
$name = stripslashes($info['name']);
$desc = stripslashes($info['description']);
Print "<h3><a href=\"result.php?product=".$name."\">".$name."</a>: <font color=\"#cd0000\">".$desc."</font></h3><br>";
}
echo $name;
?>

结果.php:

<?php
$result = $_GET['product'];
echo $result;
?>

现在我的问题是搜索中的通配符。假设有人搜索两个词“foo bar”。按照我的方式,单词必须完全按照这个顺序排列,单词之间有一个空格,这样才能出现一些内容。有没有办法在我的搜索参数中,如果单词“foo”和“bar”在任何地方(即使不是彼此相邻),结果也会显示出来?另外,如果单词的顺序颠倒,我希望它能够工作,“bar foo”(再次甚至不彼此相邻)。

最佳答案

由于您正在进行 LIKE '%...%' 匹配,因此您应该意识到 MySQL 无法使用索引来执行此类搜索,并且您每次都会强制执行全表扫描。正如您所提到的,如果用户输入 foo bar,您将搜索完整的短语。

您有几种选择,使用 foo bar 作为搜索短语:

1)预处理搜索词,使搜索短语中的每个“单词”成为自己的匹配集,例如

WHERE (
field1 LIKE '%foo%' OR field2 LIKE '%foo%' OR ...
OR field1 LIKE '%bar%' OR field2 LIKE '%bar%' OR ...
)

2) 切换到使用全文索引,将查询减少到

WHERE MATCH(field1, field2, ...) AGAINST ('foo bar')

关于php - 如何以最有效的方式使用通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com