使用短语搜索mysql数据库

时间:2013-10-25 07:02:50

标签: php mysql sql

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

列 标题,描述,价格

当用户键入短语时,搜索数据库的最佳方式是什么? “相当常用的移动设备20,000”

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

4 个答案:

答案 0 :(得分:1)

不要使用喜欢,

在3列

上定义全文索引

并以全文搜索

答案 1 :(得分:1)

您应该explode()字符串来搜索每个单词。另一方面,您必须为price设置正确的列类型,因为20,000不是有效的数字类型,您需要在数据库中存储20.000并在php中转换为20,000到20.000,或者爆炸字符串,也不仅仅是自由空间。

一个简单的爆炸可以通过将' ' - 空格分开来完成,它可以适用于您的变体,但如果用户键入fairly, used因为“LIKE”%,它将无效公平地说,%'不会返回所需的输出。

我将通过空字符串显示一个简单的代码,仅用于解释逻辑,但我希望您稍后可以通过替换不需要的字符来使搜索引擎更加智能。

<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

答案 2 :(得分:1)

你可以尝试:

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

list_title like '%".implode('%', explode(' ', $search))."%' 

答案 3 :(得分: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

如果你想搜索每个单词,你必须用空格分割字符串,并在查询中添加它们