2011-10-25 19 views
0

我希望我的搜索僅顯示匹配同一行中的值的結果。我希望我的搜索只顯示匹配字段值的結果。這是如何完成的?

我有兩個搜索字段:

'搜索' 和 '搜索字詞'

在我的數據庫字段名

名 姓氏 電子郵件

因此,例如:如果我搜索

「邁克」在「搜索」和「史密斯在「搜索詞」唯一的結果我想顯示的結果那場比賽「麥克·史密斯」沒有表現出像「麥克·哈里斯」

這是如何取得的成果?

謝謝!

詹姆斯

<?php 

$conn = mysql_connect("", "", ""); 



if (!$conn) { 
echo "Unable to connect to DB: " . mysql_error(); 
exit; 
} 

$search = addcslashes($search,'%_'); 
$searchterm = addcslashes($searchterm,'%_'); 

    $search = "%" . $_POST["search"] . "%"; 
$searchterm = "%" . $_POST["searchterm"] . "%"; 



if (!mysql_select_db("")) { 
echo "Unable to select mydbname: " . mysql_error(); 
exit; 
} 

$search = $_POST['search']; 
$searchterm = $_POST['searchterm']; 
$sql = "SELECT name,lastname,email 
FROM test_mysql 
WHERE name LIKE '%". mysql_real_escape_string($search) ."%'"; 
$result = mysql_query($sql); 


if (!$result) { 
echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
exit; 
} 

if(empty($_GET['search'])){ // or whatever your field's name is 
    echo 'no results'; 
}else{ 
    performSearch(); // do what you're doing right now 
} 

if (mysql_num_rows($result) == 0) { 
echo "No rows found, nothing to print so am exiting"; 
exit; 
} 


while ($row = mysql_fetch_assoc($result)) { 
echo '<br><br><div class="data1">'; 
echo htmlentities($row["name"]); 
echo '</div><br><div class="data2">'; 
echo htmlentities($row["lastname"]); 
echo '</div><br><div class="data3">'; 
echo htmlentities($row["email"]); 
echo '</div>'; 
} 

mysql_free_result($result); 

?> 
+0

因爲你的例子是什麼都不做與$搜索關鍵詞這個問題讀取滑稽。我假設你已經嘗試了一個簡單的AND語句? 「WHERE name LIKE'%」。$ search。「%'和name LIKE'%」。$ searchterm。「%'」 - 這會使兩個詞成爲一個要求。 –

+0

對不起,我對mysql很新,我只是昨天才開始。我如何適應mysql_real_escape_string($ search)?我正在學習語法,不確定如何佈置剛纔所說的內容? – James

回答

2

變化:

WHERE name LIKE '%". mysql_real_escape_string($search) ."%'"; 

要:

WHERE name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'"; 
+0

感謝我正在尋找的東西!如何在發送空查詢時停止搜索返回所有數據庫的結果? – James

+0

在運行代碼之前,您需要檢查$ search和$ searchterm變量:'if($ search ===''&& $ searchterm ===''){...在這裏做某事...} else {run query }'。請記住,人們可以發送%符號,這也符合一切,不知道這對你是否有問題。 – Ariel

+0

哦,它怎麼能被停止,所以如果他們發送'%',他們不能返回所有內容 – James

1
$sql = "SELECT name,lastname,email 
FROM test_mysql 
WHERE name LIKE '%". mysql_real_escape_string($search) ."%' 
AND name LIKE '%". mysql_real_escape_string($searchterm) ."%'"; 

此外,我看一下你的查詢,你可能要考慮對姓氏匹配以及。您的示例建議您可能正在查找名和姓,但查詢只是比較名稱。

我經常在我的可搜索表格中創建一個名爲「search」的字段,然後將它們設置爲全文索引,這樣我就可以使用mysql MATCH AGAINST來獲得更強大的搜索選項。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

這是一個,而在我的PHP開發之前,我學到了對比賽。一定會很早就知道是有益的。希望能幫助到你。

+0

只是我需要的答案!如何在發送空查詢時停止搜索返回所有數據庫的結果? – James

+0

處理前的條件語句。 if(!empty($ _ POST ['search'])){your code here} ...但你可能想要更復雜一些,比如使用php trim($ _ POST ['search'])來確保它不僅僅是白色空間。或strlen($ _ POST ['search'])來確保它不止一個字符。等 –

+0

謝謝,有沒有什麼好的網站,你知道,這將有助於一個MySQL初學者? – James

1

變化:

$search = addcslashes($search,'%_'); 
$searchterm = addcslashes($searchterm,'%_'); 

$search = "%" . $_POST["search"] . "%"; 
$searchterm = "%" . $_POST["searchterm"] . "%"; 

要:

$search = "%" . addcslashes($_POST["search"],'%_'). "%"; 
$searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%"; 
+0

謝謝阿里爾!我非常感謝你的幫助。請在搜索字段中查看http://www.weezy.co.uk/newresults.php搜索「%」。爲什麼右列消失? – James

+0

因爲你做了「找不到行,沒有什麼可以打印,所以正在退出」 - 即你退出而不是跳過行顯示,但繼續。 – Ariel

+0

啊謝謝,我擺脫了那部分,它現在工作正常。我仍然面臨的另一個問題是,我很難做到這一點,所以當提交空搜索時沒有結果顯示。我已經使用過樣本,但我真的不確定如何使它工作 – James

相關問題