2012-07-03 214 views
0

我在我的數據庫書籍,作者,發佈中有三個表格...我希望用戶可以在三個表格中搜索whith,如果他編寫任何相關的詞彙。同一個詞,如果在書表中找不到它會在另一個表中查找等...我這樣做,但有些事情錯了,我希望它在一個MySQL的sentence..anyone幫我請如何在許多表中使用關鍵字進行搜索

function getsomeword($keyword) { 
    $result1 = $this->db->query("SELECT bo_id,bo_name,bo_state,bo_about FROM d_book where (bo_name like '%$keyword%' or bo_about like '%$keyword%') and bo_state = '1'"); 
    $result1 = $result1->num_rows(); 
    $result2 = $this->db->query("SELECT au_id,au_name,au_state,au_info FROM d_author where (au_name like '%$keyword%' or au_info like '%$keyword%') and au_state = '1'"); 
    $result2 = $result2->num_rows(); 
    $result3 = $this->db->query("SELECT pub_id,pub_name,pub_state,pub_info FROM d_publishing where (pub_name like '%$keyword%' or pub_info like '%$keyword%') and pub_state = '1'"); 
    $result3 = $result3->num_rows(); 
    return $result1 + $result2 + $result3; 

} 
+1

您可以使用UNION(SQL)來解決此問題。 –

+0

請注意,UNION中的每個SELECT語句必須具有相同的列數。這些列也必須具有相似的數據類型。另外,每個SELECT語句中的列必須以相同的順序排列。 – user1080247

+0

好的,你也可以使用Sphinx搜索引擎來解決這個問題。 –

回答

2

您正在尋找的UNION關鍵字:

SELECT ... 
UNION [ALL | DISTINCT] SELECT ... 
[UNION [ALL | DISTINCT] SELECT ...] 

http://dev.mysql.com/doc/refman/5.0/en/union.html

不要忘記淨化你的投入,好像你把$keyword值在查詢中沒有逃脫/前消毒它。您應該查看PDO::prepare以防止SQL注入(http://www.php.net/manual/fr/pdo.prepare.php)。

+0

請注意,UNION中的每個SELECT語句必須具有相同數量的列。這些列也必須具有相似的數據類型。另外,每個SELECT語句中的列必須以相同的順序排列。 – user1080247

+0

是的,它看起來像與示例查詢完美契合。 –