2011-07-01 208 views
0

我想從2個數據庫中選擇具有完全相同結構的同一臺服務器,並且db2是db1的連續性。問題是我試圖從兩個數據庫中選擇相同的信息「不同的唯一ID」雖然「,我需要格式化爲這樣的查詢:link_id AS ID,標題AS標題以正確使用$ row ['標題']呈現信息等這是我的查詢。SQL查詢幫助

$CONF['mysql_query'] = 'SELECT db1.l.link_id AS id, db1.l.title AS title, db2.r.link_id AS id, db2.r.title AS title FROM db1.links AS l LEFT OUTER JOIN db2.links AS r ON (r.link_id = l.link_id) WHERE l.link_id IN ($ids)'; 

爲什麼它不允許我在兩個數據庫中都使用標題AS標題等?有什麼辦法可以做到這一點?謝謝。在單引號

+0

你究竟想要什麼?要將兩個位於不同數據庫中的表連接在一起?或者這兩個表的聯合? –

回答

2

你不能在SELECT列表2列具有相同的名稱。這就是爲什麼你不能有兩個id或兩個title

如果你想加入的兩個表,使用方法:

$CONF['mysql_query'] = " 
     SELECT l.link_id AS idL 
      , l.title AS titleL 
      , r.link_id AS idR 
      , r.title AS titleR 
     FROM db1.links AS l 
      LEFT OUTER JOIN db2.links AS r 
      ON (r.link_id = l.link_id) 
     WHERE l.link_id IN ($ids) 
    "; 

的上面會顯示滿足從第一個表和第二個表對應的標題l.link_id IN ($ids)條件的所有ID和標題。第三列和第四列中的空值將顯示第二個表中是否沒有對應的行。


如果你想要UNION,例如,從第一個表中的所有行(即滿足條件l.link_id IN ($ids))加上從所述第二表中的所有行,使用:

$CONF['mysql_query'] = " 
     SELECT link_id AS id 
      , title AS title 
     FROM db1.links AS l 
     WHERE l.link_id IN ($ids) 
    UNION     
     SELECT link_id AS id 
      , title AS title 
     FROM db2.links AS r 
    "; 

這將可能顯示出與相同的id,一個來自每個表的行。甚至重複行。儘管可以通過將UNION ALL而不是UNION來輕鬆地避免重複的行。

+0

WHERE l.link_id IN($ ids)是因爲我使用sphinx從mysql中獲取ID。 – chris

+0

@chris:好的。我會更新。 –

+0

我一直收到第8行的語法錯誤「您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以找到在第8行附近使用的正確語法」)。 – chris

0

化名標題,它可以讓你

select t1.Title as 'title' , t2.Title as 'title' from Table1 t1,Table t2 
+0

我試過了,它不起作用。 – chris