2012-12-10 53 views
0

我試圖讓我的網站搜索框能夠在一個查詢中搜索多個表。分組或加入搜索查詢?

因此,如果對存儲在ptb_profiles他們得到任何用戶匹配的名稱,或者如果他們搜索按國籍存儲在ptb_stats他們得到所有顯示國籍的用戶的用戶display_name用戶搜索。

當我最初使用SELECT * FROM ptb_users, ptb_stats, ptb_profiles時,我得到了重複的搜索結果,並且多次顯示相同的結果,所以我試圖避免這種情況,並且每個結果只顯示一次,通過分組和聯合使用除了沒有工作。

現在香港專業教育學院嘗試這樣:

$query_for_result=mysql_query("SELECT display_name, location, gender, contact_number FROM ptb_profiles WHERE display_name LIKE '%".$query."%' OR location LIKE '%".$query."%' OR gender LIKE '%".$query."%' OR contact_number LIKE '%".$query."%' JOIN SELECT email, subscription FROM ptb_users WHERE email like '%".$query."%' OR subscription like '%".$query."%' JOIN SELECT nationality, hobbies, local_station FROM ptb_stats WHERE nationality like '%".$query."%' OR hobbies like '%".$query."%' OR local_station like '%".$query."%' 
     LIMIT 5"); 

但這恰恰帶來了以下錯誤:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PTB1/includes/mod_sidebar/search.php on line 31 

能有人告訴我我要去哪裏錯了嗎?

+0

您沒有向我們展示您的架構,也沒有任何代碼或解釋計劃。你得到的錯誤是因爲你的代碼失敗*之前*它到達mysql_fetch_array()並且你沒有包含足夠的檢查。 – symcbean

+0

可能的重複[mysql_fetch_array()期望參數1是資源,布爾在給出](http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource- boolean-given-in-select?answertab = votes#tab-top) –

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

回答

0

這不是唯一的方法。但是,如果將GROUP BY應用於查詢,則可以在多個連接的表上執行搜索並輕鬆獲取不同的用戶列表。假設所有的表涉及通過一個ID列這樣的事情可能會奏效......如果可能的用戶不具有ptb_stats或ptb_profiles記錄

SELECT u.* FROM ptb_users u 
INNER JOIN ptb_stats s ON s.user_id=u.id 
INNER JOIN ptb_profiles p ON p.user_id=u.id 
WHERE "this or that" 
GROUP BY u.id 

更改您的加入到左JOINS ...

+0

SELECT u。* FROM ptb_users AS u – vodich

+0

如果您試圖聲明缺少「AS」關鍵字,請理解「SQL」語法中實際不需要「AS」關鍵字。這更像是過去幾十年的遺物。 – lifo

+0

不知道!謝謝! – vodich

0

mysql_fetch_array()抱怨$query_for_result不是查詢結果。 您必須檢查mysql_query()的返回值。如果你的SQL語句有問題,它將返回false。所以至少要做到這一點

$sql = "select ..."; 
$result = mysql_query($sql) or die("Error in $sql: " . mysql_error()); 

以防止和診斷此類錯誤。