2011-07-01 61 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