2013-02-05 69 views
1

Im从头开始构建搜索引擎。限制后的SQL结果

  • 它可以扫描多个数据库中的许多不同的表。
  • 它只搜索指定的列。
  • 搜索词是explode()'多个词搜索的编辑案例
  • 它通过表迭代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); 
?> 
+0

你有没有探索与全不同的数据库的全文搜索选项? [例如](http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html)。这看起来诱人吗? 'SELECT id,MATCH(title,body)AGAINST('Tutorial')FROM文章;' – ficuscr

+4

为什么这会得到upvoted?你的代码只会搜索最后使用的单词,你很容易被注入,并且你仍然在使用mysql_ *函数而不是PDO或mysqli的准备语句。如果你只是研究一下,那么就有大量的信息。 –

+0

我知道即时通讯使用MySQL的功能,这是因为该网站起源于旧的风格和即时通讯截止日期为我的公司完成。当它正常工作并启动时,我将致力于升级到PDO和mysqli ..关于其他信息,它是可以注射的,但是您只能看到小部分,即时通讯使用3个不同的数据库和大约30个表格,在每个表格中,通过从关键字数据库下拉菜单中搜索项目的细节。它变得复杂,这就是为什么我找不到我需要的东西。 – user1978664

回答

0

的所有http://bobby-tables.com/

首先其次,在PDO堵漏只需要的几行代码。

第三,全文搜索要好得多。

最后:

使用阵列microcaching。我假设$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>"; 
}