1

我从头开始构建搜索引擎。

  • 它扫描多个数据库中的许多不同表。
  • 它仅搜索指定的列。
  • 搜索词是explode()多词搜索的情况
  • 它用 a 遍历foreach表。

我在用LIMIT. 我希望它只显示DISTINCT

例如,如果我搜索Joe Schmoe我的代码将搜索first = joe然后 for 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);
?>
4

1 回答 1

0

首先http://bobby-tables.com/

其次,插入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>";
}
于 2013-03-19T14:32:58.523 回答