【发布时间】:2013-01-20 16:25:47
【问题描述】:
我正在从头开始构建搜索引擎。
- 它扫描多个数据库中的许多不同表。
- 它只搜索指定的列。
- 搜索词是
explode()'ed 多词搜索的情况 - 它使用
foreach遍历表。
我在使用 LIMIT 构建代码库时遇到问题。我希望它只显示DISTINCT。
例如,如果我搜索Joe Schmoe,我的代码将搜索first = joe,然后搜索last = schmoe,它会为每个搜索显示一个结果。但我希望它只显示两个搜索的一个结果。
<?php
echo "<h1>Search Results</h1>";
echo "<table style='width: 100%;'>";
$a = $_GET["q"];
$b = explode(" ", $a);
include 'db_connect3.php';
mysql_select_db("db440035579", $con);
foreach($b as $c){
$sql="SELECT * FROM users WHERE first LIKE '%$c%' || last LIKE '%$c%'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
echo "<a href='applications.php?act=search&uid=$row[7]'>$row[5], $row[4]</a>";
}
}
mysql_close($con);
?>
【问题讨论】:
-
您是否探索过不同数据库的“全文搜索”选项? For example。这看起来很诱人吗?
SELECT id, MATCH (title,body) AGAINST ('Tutorial') FROM articles; -
为什么这会得到支持?您的代码只会搜索使用的最后一个单词,您很容易被注入,并且您仍在使用 mysql_* 函数而不是 PDO 或 mysqli 的预处理语句。 + 只要稍微研究一下,就会有大量信息。
-
我知道我正在使用 mysql 功能,这是因为该站点起源于旧样式,并且我在截止日期前完成了我的公司。当它运行并启动时,我将致力于升级到 PDO 和 mysqli。关于其他信息,它可以注入但你只看到了一小部分,我使用 3 个不同的数据库和大约 30 个表,列数有限在每个表中,详细说明使用关键字 db 的下拉搜索的项目。它变得复杂,这就是为什么我找不到我需要的东西。
标签: php mysql search-engine