2011-07-01 74 views
2

我正在使用sphinx進行網站搜索,它的工作原理很好,但現在我試圖連接到2個具有相同結構的mysql數據庫,並且db2是db1的延續,因此所有信息都應該順利流動。通過在代碼中切換數據庫名稱,我可以輕鬆獲得結果,但我怎樣才能一次選擇兩者?連接到多個數據庫

這裏是使用

$CONF['sphinx_host'] = 'localhost'; 
$CONF['sphinx_port'] = 9312; 
$CONF['mysql_host'] = "localhost"; 
$CONF['mysql_username'] = "user"; 
$CONF['mysql_password'] = "password"; 
$CONF['mysql_database'] = "db1"; 
$CONF['sphinx_index'] = "index index2"; 


$db = mysql_connect($CONF['mysql_host'],$CONF['mysql_username'],$CONF['mysql_password']) or die("ERROR: unable to connect to database"); 
mysql_select_db($CONF['mysql_database'], $db) or die("ERROR: unable to select database"); 


$sql = str_replace('$ids',implode(',',$ids),$CONF['mysql_query']); 
$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later"); 

此代碼工作正常,如果我輸入一個MySQL數據庫到$CONF['mysql_database'] = "db1";但我需要從db1db2選擇一些代碼即時通訊。有誰知道我能做到這一點?此外,我沒有發佈查詢,因爲我不認爲它是非常有用的,它只是一個簡單的選擇查詢,我相信你明白了。

回答

2

如果數據庫託管在同一臺服務器上,則可以在撥打mysql_select_db()時簡單地選擇一個數據庫,然後使用databasename.前綴限定SQL查詢中的所有表名。您甚至可以在一個查詢中混合和匹配來自兩個數據庫的表。例如。

select h.lastname, h.firstname, p.petname 
    from db1.humans as h 
    left outer join db2.pets as p on p.human_id = h.id; 

如果你不需要寫涉及兩個數據庫的查詢,可以再次每次需要切換數據庫時調用mysql_select_db()

如果數據庫託管在不同的服務器上,則需要對mysql_connect()進行兩次不同的調用。在這種情況下,請確保將可選$link參數傳遞給所有mysql_函數,因爲默認行爲是簡單地使用最近的連接,這可能會導致各種錯誤。由於每個數據庫都有單獨的連接,因此您將無法運行訪問這兩個數據庫的單個查詢。

+0

他們在同一臺服務器上。我會嘗試你說的前綴和回報。謝謝。 – chris

+0

我現在想到了很多。我相信很快就會很好。謝謝。 – chris