Php 限制后sql结果

Php 限制后sql结果,php,mysql,search-engine,Php,Mysql,Search Engine,我从头开始建立一个搜索引擎 它扫描多个数据库中的许多不同表 它只搜索指定的列 在多词搜索的情况下,搜索词为explode() 它使用foreach遍历表 我在使用限制构建代码库时遇到问题。我希望它只显示不同的 例如,如果我搜索Joe Schmoe,我的代码将首先搜索first=Joe,然后搜索last=Schmoe,它将显示每次搜索的结果。但我希望它只显示两次搜索的一个结果 <?php echo "<h1>Search Results</h1>"; echo

我从头开始建立一个搜索引擎

  • 它扫描多个数据库中的许多不同表
  • 它只搜索指定的列
  • 在多词搜索的情况下,搜索词为explode()
  • 它使用
    foreach
    遍历表
我在使用
限制构建代码库时遇到问题。我希望它只显示
不同的

例如,如果我搜索
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);
?>
首先

其次,插入
PDO
只需要几行代码

第三,全文搜索更好

最后:

使用数组。我假设
$row[0]
user.id
。这样,每个
ID

$cache = array();    
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)){
        $cache[$row[0]] = $row;
    }
}
foreach($cache as $row){
    echo "<a href='applications.php?act=search&uid=$row[7]'>$row[5], $row[4]</a>";
}
$cache=array();
foreach($b为$c){
$sql=“从第一个类似“%$c%”的用户中选择*;最后一个类似“%$c%””;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u数组($result)){
$cache[$row[0]]=$row;
}
}
foreach($缓存为$行){
回声“;
}

您是否使用不同的数据库探索过“全文搜索”选项。这看起来诱人吗<代码>选择id,根据文章中的(“教程”)匹配(标题、正文)为什么这会被提升?您的代码将只搜索使用的最后一个单词,您非常容易受到注入攻击,并且您仍然使用mysql_*函数,而不是PDO或mysqli准备好的语句我知道我在使用mysql的功能,这是因为这个网站起源于旧的风格,我的公司在最后期限前完成了它。当它运行正常并启动后,我将致力于升级到PDO和mysqli。。至于其他信息,可以使用注入,但是您只看到了一小部分,我使用3个不同的数据库和大约30个表,每个表中的列数有限,并且使用关键字数据库中的下拉列表搜索项目的详细信息。事情变得复杂了,这就是为什么我找不到我真正需要的东西。