我不知道为什么我在任何地方都找不到这个。我认为这将是非常普遍的要求。我正在用 PHP 编写一个搜索引擎,以在 MySQL 数据库中搜索用户输入的关键字。
表中有几列,但只有 2 列需要搜索。它们被命名为 file_Title 和 file_Desc。把它想象成一个分类广告。项目标题和描述。
例如,用户会搜索“John Deere Lawn Tractor”。我想要发生的是所有这 4 个词都显示在列表顶部的分类。然后结果只有 3 个,依此类推。
我在http://www.roscripts.com/PHP_search_engine-119.html阅读了一个非常好的网页
从该作者示例中,我有以下代码:
<?php
$search = 'John Deere Lawn Tractors';
$keywords = split(' ', $search);
$sql = "SELECT DISTINCT COUNT(*) As relevance, id, file_Title, file_Desc FROM Listings WHERE (";
foreach ($keywords as $keyword) {
echo 'Keyword is ' . $keyword . '<br />';
$sql .= "(file_Title LIKE '%$keyword%' OR file_Desc LIKE '%$keyword%') OR ";
}
$sql=substr($sql,0,(strLen($sql)-3));//this will eat the last OR
$sql .= ") GROUP BY id ORDER BY relevance DESC";
echo 'SQL is ' . $sql;
$query = mysql_query($sql) or die(mysql_error());
$Count = mysql_num_rows($query);
if($Count != 0) {
echo '<br />' . $Count . ' RESULTS FOUND';
while ($row_sql = mysql_fetch_assoc($query)) {//echo out the results
echo '<h3>'.$row_sql['file_Title'].'</h3><br /><p>'.$row_sql['file_Desc'].'</p>';
}
} else {
echo "No results to display";
}
?>
输出的 SQL 字符串是这样的:
SELECT DISTINCT COUNT(*) As relevance, id, file_Title, file_Desc FROM Listings
WHERE ((file_Title LIKE '%John%'
OR file_Desc LIKE '%John%')
OR (file_Title LIKE '%Deere%'
OR file_Desc LIKE '%Deere%')
OR (file_Title LIKE '%Lawn%'
OR file_Desc LIKE '%Lawn%')
OR (file_Title LIKE '%Tractors%'
OR file_Desc LIKE '%Tractors%') )
GROUP BY id
ORDER BY relevance DESC
使用此代码,我从我的数据库中获得 275 个结果。我的问题是它真的不按行中找到的关键字数量排序。它似乎是按 id 排序结果。如果我删除 'GROUP BY id' 那么它只返回 1 个结果而不是所有结果,这真的让我很困惑!
我也尝试在数据库中切换到 FULLTEXT,但似乎也无法做到这一点,所以我更愿意坚持使用LIKE %Keyword%
语法。
任何帮助表示赞赏!谢谢!