2011-07-01 66 views
0

我將概括這個問題,以便其他人可以使用答案。
假設我有一個由MYSQL數據庫驅動的網站。
數據庫包含5個表格:活動,新聞,書籍,文章,提示
每個表都有在其他2場標題詳細中,我想搜索
在該網站上我有一個搜索表單(文本框和按鈕)的每一頁。
當我輸入一個單詞或短語後,我想將其重定向到一個名爲search的頁面,我應該將結果看作一個列表,並使用整個數據庫中的鏈接。
例如
書X(它鏈接到數據庫中找到的書)
事件Ÿ
字母Z搜索頁面引擎PHP與MYSQL數據庫?

HELP:的表是InnoDB引擎,以便全文搜索也沒我的工作在構建SELECT語句時遇到問題,該語句用於從多個表中搜索多個字段,其中包括LIKE。我已經成功了一個表,但有多個表和多個字段,在某些情況下,我收到錯誤或沒有數據或重複的數據。有些人可以幫助選擇這個陳述。

問題:如何爲我的MYSQL數據庫中的所有表建立一個搜索引擎?一些SQL注入或其他黑客預防建議也將受到讚賞。

回答

0

我的情況方法是創建一個基於類似列(我們只需要搜索列),並與他們的表名多了一個別名列中的所有表的視圖/實體名稱(書籍,事件等)

它應該是這樣的

EntityName  Title  Details 
Books   xxxx  xxxxx 
............................... 

我沒有解釋如何與工會創建視圖(不使用UNION ALL如果不希望重複)。

的下一站將使用類似的語句

select * from vwSearchData where Title like '%keyword' or details like '%keyword' 

下一步是與他們的實體名稱一起顯示的數據是搜索。

當然,您需要通過從搜索表單中過濾html實體來獲取關鍵字。

+0

我用聯合創建了一個很長的查詢,它工作,然後我試圖創建一個視圖,並使用一個更簡單的語句,但執行後在phpmyadmin解決方案與視圖比查詢本身慢得多(它顯示結果幾乎快兩倍)。也許我做錯了你能否提供更多關於創建正確觀點的細節? – Raul

0

您可以使用UNION:

(SELECT * FROM events WHERE title LIKE '$key' OR details LIKE '$key') 
UNION 
(SELECT * FROM news WHERE title LIKE '$key' OR details LIKE '$key') 

等。

+0

謝謝,它工作 – Raul