我制作了一个mysql / php搜索引擎,其中我添加了谷歌网址与关键字谷歌搜索引擎和另一个雅虎网址与关键字雅虎搜索引擎。如果我在搜索框中输入Google搜索引擎,我该如何首先显示Google网址?
这是代码:
//connect to database
mysql_connect("","","");
mysql_select_db("");
//explode out search term
$search_exploded = explode(" ",$search);
foreach($search_exploded as $search_each)
{
//construct query
$x++;
if ($x==1)
$construct .= "Keywords LIKE '%$search_each%'";
else
$construct .= " OR Keywords LIKE '%$search_each%'";
}
//echo outconstruct
$constructx = "SELECT * FROM searchengine WHERE $construct";
$construct = "SELECT * FROM searchengine WHERE $construct LIMIT $s,$e";
$run = mysql_query($constructx);
$foundnum = mysql_num_rows($run);
$run_two = mysql_query("$construct");
if ($foundnum==0)
echo "No results found for <b>$search</b>";
else
答案 0 :(得分:2)
这里最好的选择不是使用LIKE
,而是使用Mysql的FULLTEXT索引。为此,您需要在要搜索的列上创建FULLTEXT索引。
ALTER TABLE searchengine ADD FULLTEXT(关键字);
要查询,请执行以下操作:
SELECT * FROM searchengine WHERE MATCH(keywords)AGAINST(“$ searchterm”);
您可以合并不同的MATCH AGAINST
查询以满足所有关键字。此外,您可以将MATCH AGAINST
位放在查询的SELECT
子句中。这将返回一个分数,然后您可以使用该分数对结果进行排名。
此外,您甚至可以在运行查询之前执行一些词干工作。使用各种MATCH
运算符生成的分数,您可以将整个单词排在高于词干单词的位置。
答案 1 :(得分:0)
SELECT count(*)
代替mysql_num_rows进行完整查询。 $construct = "SELECT * FROM searchengine WHERE $construct ORDER BY Keywords LIMIT $s,$e ";
不要忘记清理你的$ search
$search = mysql_real_escape_string($search);