【问题标题】:Limiting post sql results限制post sql结果
【发布时间】: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


【解决方案1】:

首先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>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-03-24
    相关资源
    最近更新 更多