sql - 在不同的数据库中搜索相关数据

标签 sql database yii2

我使用 yii2 构建一个需要连接一些表的应用程序。我可以简单地加入他们并搜索相关领域的数据。我通过添加这样的连接来做到这一点>

public function getNextTab()
{
return  $this->hasOne(NextTab::className(),['id' =>'id_nexttab']);  
}

然后像这样在搜索模型中请求数据->

->where ('id'='ok') ->
->joinWith('nextTab')
->joinWith('nextTab.nextTab1')
->joinWith('nextTab.nextTab1.nextTab2');

我的问题是当我尝试对来自不同数据库的表执行此操作时。查询是给我这样的错误

SQLSTATE[42S02]: Base table or view not found: 

有什么技巧可以通过吗?或者如何进行其他连接方式来获取数据。

最佳答案

您的 RDBMS 可能不支持连接来自不同数据库的表(例如 PostgreSQL)。但如果支持( MSSQLMySQL ),则表名应以数据库名称为前缀(如果需要,还应加上模式)。您可以使用 {{%TableName}} syntax 在 Yii2 中实现此目的在 tableName() 函数中。

public static function tableName()
{
    return '{{%table_name}}';
}

但是如果它们位于不同的服务器上,那么连接来自不同数据库的表时要小心——这可能会非常慢。

如果您只想获取相关数据(WHERE 中不使用连接表),则使用 with()而不是 joinWith()。这将作为带有 IN 语句的单独查询执行。在大多数情况下,这种方式具有更好的性能,并且对于不同的来源(甚至不同的 DBMS)没有问题。

->with('nextTab', 'nextTab.nextTab1', 'nextTab.nextTab1.nextTab2')

关于sql - 在不同的数据库中搜索相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616929/

相关文章:

yii2 - 使用关系 yii2 访问表字段

sql - Oracle SQL : Export to CSV avoiding newlines

mysql 选择动态行值作为列名,另一列作为值

sql - Access 关系问题导致数据未提取到正确的表

mysql - 我尝试修复的问题无法连接到 MySQL at 127.0.0.1 :3306 with user root

menu - 具有嵌套集行为的 Yii2 菜单小部件的实现

sql - 对于 XML 长度限制

mysql - 在此查询中出现错误 "Operand should contain 1 column(s)"

database - 优化 Redshift 查询的大 IN 条件

php - Yii2 加入 4 个表的关系