2012-04-18 58 views
0

所以我有6個表,每個6列,像地址,名稱等我必須實現搜索功能,用戶輸入一個'單詞',我必須搜索我的整個數據庫(全部6個表)來查找該單詞,並且當找到該單詞時,該特定行應該從該表中返回。任何想法我怎麼能做到這一點?如何在我的數據庫中實現「搜索」?

回答

0

使用LIKE子句和通配符。 (示例PHP)

'Select * FROM Table_Nam WHERE column_Nam1 LIKE %' . $searchValue . '%'. 
    'OR column_Nam2 LIKE %' . $searchValue . '%'. 
    'OR column_Nam3 LIKE %' . $searchValue . '%'. 
    'OR column_Nam4 LIKE %' . $searchValue . '%'. 
    'OR column_Nam5 LIKE %' . $searchValue . '%'. 
    'OR column_Nam6 LIKE %' . $searchValue . '%'.; 
1

假設所有六個表都可以使用此查詢相同的列名。

SELECT * FROM TABLE1 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
UNION ALL 
SELECT * FROM TABLE2 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
UNION ALL 
SELECT * FROM TABLE3 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
and so on... 

如果六個表具有不同的列名,你仍然可以使用union all但在此之前,你必須讓每一位選擇返回相同的列名

SELECT col_a as COL1, col_b as COL2, col_c AS COL3, col_d AS COL4, col_e AS COL5, col_f as COL6 FROM TABLE1 WHERE .... 
UNION ALL 
SELECT col_q as COL1, col_w as COL2, col_e AS COL3, col_r AS COL4, col_t AS COL5, col_y as COL6 FROM TABLE2 WHERE .... 
etc.. 

如果兩個都不重命名列上面的查詢將爲您的目的而工作,您仍然可以使用單個查詢,執行六個不同的選擇語句。

+0

在'union'的例子中,我猜測表(TABLE1,TABLE2等)一個記錄被發現也很重要,應該包含在每一行中,否則一個人將不知道搜索結果來自哪個表。我試圖堅持分開查詢來使它更加明顯(除非在一個查詢中完成搜索是至關重要的,在這種情況下,我會使用存儲過程)。 – sennett 2012-04-19 04:54:18

+0

你總是可以知道從哪個表得到的結果,只是在每個select中添加一個簡單的靜態列...即'select table_1 as name ... from table1 .... union all select table_2 as name from table2 ...等等等等 – Marcx 2012-04-19 07:13:18