我有一个mysql数据库的本地分类网站,我正在使用PHP。 它有一个存储列表的表格,但我们将只使用3列进行搜索:
列 标题,描述,价格
当用户键入短语时,搜索数据库的最佳方式是什么? “相当常用的移动设备20,000”
如果短语与数据库中的任何一个有效匹配,我希望能够搜索3列。我知道'%LIKE'功能,但我认为应该有更好的方法。
答案 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
如果你想搜索每个单词,你必须用空格分割字符串,并在查询中添加它们