2013-02-05 103 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>"; 
}