gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:12 25 4
gpt4 key购买 nike

我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com