2012-08-10 31 views
0

我正在構建一個Mysql全文搜索,我有4個表來搜索。當我在搜索查詢中只使用單個表時,它可以工作,但是當我在查詢中使用多個表時,它不起作用。我也不想在查詢中使用UNION ALL,因爲我使用複選框選擇選項來執行單個或多個表中的搜索。Mysql全文搜索多表的查詢修改

MySQL查詢多表不工作。

$sqlquery = mysql_query("(SELECT * FROM table1, table2, table3, table4 WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE))ORDER by pflink desc, $orderby $sortby LIMIT $rowsperpage OFFSET $offset ")or die (mysql_error()); 

它給了我錯誤Column 'pflink' in where clause is ambiguous

使用單表查詢工作。

$sqlquery = mysql_query("(SELECT * FROM table1 WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE))ORDER by pflink desc, $orderby $sortby LIMIT $rowsperpage OFFSET $offset ")or die (mysql_error()); 

的Html代碼複選框

<input name="all-tables" type="checkbox" value="true" checked="checked" id="check-all" > 
    <input name="table1" type="checkbox" value="true" disabled="disabled" > 
    <input name="table2" type="checkbox" value="true" disabled="disabled" > 
    <input name="table3" type="checkbox" value="true" disabled="disabled" > 
    <input name="table4" type="checkbox" value="true" disabled="disabled" > 

請提出任何可能的方式來修改這個查詢,使之成爲多個表工作。

謝謝。

+0

,因爲你的mysql引擎發生了混亂,爲這臺pflink屬於:) – WatsMyName 2012-08-10 08:35:17

+0

@Sabin pflink和標題中的所有表,其實所有的表結構相同,但不同的值。 – 2012-08-10 08:36:27

+0

我希望你已經在每個表格上定義了索引。同樣,如果您擁有所有具有相同結構的表,pflink仍然不明確,因爲您尚未定義pflink引用的表。此外,到目前爲止,我知道,全文搜索將無法在多個表中使用。對於類似的討論http://stackoverflow.com/questions/1241602/mysql-match-across-multiple-tables – WatsMyName 2012-08-10 08:48:31

回答

0

很久以前我回到類似的條件。我有多個表格來使用全文,但我無法弄清楚我想做什麼的方式。我搜查,但無法找到方式。所以最後我想出了以下想法

1. Make another table say "keywords", with fields title, description , item_id, and the table data belongs to. 
2. make a code to fetch all title and description from table1,table2 and so on and insert it to keywords. 
3. Make keywords table suitable for full text search. 
4. when user searches, search keyword table. Retrieve relevant value from table1, table 2 etc from the recordset (as you get item id and table from the full text search query). 

這樣做的好處是查詢會更快,更容易。

希望這有助於

+0

您的解決方案就像製作一個包含所有表格數據的表格,然後進行全文搜索。 – 2012-08-10 09:35:27

+0

是的,我有不同的表,相似的結構,但不同的價值。第一張表包含與衣服相關的價值,第二個涉及鞋子,第三個涉及化妝品,第四個涉及書籍。我有一個像谷歌一樣的文本框,搜索時我必須顯示所有表的結果。我發現這種方式影響和更容易..事實上,這只是我想出的解決方案。我編寫了一個cron作業來截斷關鍵字表,並從所有表中選擇所有值並將其重新插入到關鍵字表中。您也可以偶爾手動運行此代碼。 – WatsMyName 2012-08-10 09:39:44

+0

你知道一種解決單個搜索查詢的方法嗎?它可以檢查類別,比如'WHERE MATCH(pflink = somecategory,title)' – 2012-08-10 10:05:05