0

我有一个带有 mysql 数据库的本地分类网站,并且正在使用 PHP。它有一个存储列表的表,但我们将只使用 3 列进行搜索:

列标题、描述、价格

当用户输入短语(例如“合理使用的移动设备 20,000”)时,搜索数据库的最佳方法是什么

如果短语有效地匹配数据库中的任何内容,我希望能够搜索 3 列。我知道“%LIKE”功能,但我认为应该有更好的方法。

4

4 回答 4

1

您应该explode()搜索每个单词的字符串。另一方面,您必须设置正确的列类型,price因为20,000它不是有效的数字类型,您需要将 20.000 存储在 db 中并将 php 20,000 转换为 20.000,或者,不仅通过可用空间来分解字符串。

一个简单的分解可以通过将字符串拆分为' '- 空闲空间来完成,它适用于您的变体,但如果用户键入它则不起作用,fairly, used因为 `LIKE '%fairly,%' 不会返回所需的输出。

我将展示一个简单的空字符串爆炸代码,只是为了解释逻辑,但我希望你可以通过稍后替换不需要的字符来使搜索引擎更智能。

<form action="" method="post">
    <input type="text" name="phrase" />
    <input type="submit" />
</form>

<?php
$phrases = isset($_POST['phrase']) ? $_POST['phrase'] : null;
$phrases = explode(' ', $phrases);
foreach ($phrases as $phrase) {
    $queries[] = $db->query("SELECT title, description, price 
                            FROM test 
                            WHERE title LIKE '%$phrase%'
                            OR description LIKE '%$phrase%'
                            OR price LIKE '%$phrase%';
    ");
}
// managing the output should be done depending on the db library you are using
于 2013-10-25T07:47:51.807 回答
1

您可以尝试如下:

$search = 'fairly used mobile devices 20,000';

list_title like '%".implode('%', explode(' ', $search))."%' 
于 2013-10-25T07:49:50.480 回答
1

不要使用喜欢,

在您的 3 列上定义全文索引

并作为全文搜索

于 2013-10-25T07:36:04.447 回答
0

你可以试试这样的

$search = 'fairly used mobile devices 20,000';

SELECT * 
FROM YOUR_TABLE 
WHERE column_title like '%$search%' 
OR description like '%$search%'
OR price like '%$search%'
ORDER BY CASE WHEN `column_title` LIKE '%$search%' THEN 0
              WHEN `description` LIKE '%$search%' THEN 1
              WHEN `price` LIKE '%$search%' THEN 2
              ELSE 3
         END

如果要搜索每个单词,则必须用空格拆分字符串并将其添加到查询中

于 2013-10-25T07:17:09.287 回答