一次查询多个数据库

我在各自的数据库中都有WordPress实例。要进行更新,我需要查询所有活动插件,这些插件存储在表“ wp_options”中,可通过以下方式访问


WHERE option_name='active_plugins'

如何访问所有活动的插件设置(分布在多个数据库中)并将其输出到一个SQL结果中?我知道database.tablename语法,但是如何使用上面的Where语句从那里继续?


单个数据库中的请求如下所示:


SELECT option_value

  FROM `database`.`wp_options`

 WHERE option_name="active_plugins"


牛魔王的故事
浏览 541回答 3
3回答

慕莱坞森

SELECT option_value FROM `database1`.`wp_options`  WHERE option_name="active_plugins"UNIONSELECT option_value FROM `database2`.`wp_options`  WHERE option_name="active_plugins"

MMTTMM

Pentium10的解决方案很好,但是它的缺点是您必须为要包含的每个架构扩展查询。以下解决方案使用一条准备好的语句为MySQL服务器上具有该表的所有模式生成结果集wp_options。这对您来说应该更方便。DROP PROCEDURE IF EXISTS `MultipleSchemaQuery`;DELIMITER $$CREATE PROCEDURE `MultipleSchemaQuery`()BEGIN    declare scName varchar(250);    declare q varchar(2000);    DROP TABLE IF EXISTS ResultSet;    create temporary table ResultSet (     option_value varchar(200)    );    DROP TABLE IF EXISTS MySchemaNames;    create temporary table MySchemaNames (        schemaName varchar(250)    );    insert into MySchemaNames    SELECT distinct        TABLE_SCHEMA as SchemaName    FROM         `information_schema`.`TABLES`      where         TABLE_NAME = 'wp_options';label1:    LOOP        set scName = (select schemaName from MySchemaNames limit 1);        set @q = concat('select option_value from ', scName, '.wp_options where option_name=\'active_plugins\'');        PREPARE stmt1 FROM @q;        EXECUTE stmt1;        DEALLOCATE PREPARE stmt1;        delete from MySchemaNames where schemaName = scName;        IF ((select count(*) from MySchemaNames) > 0) THEN            ITERATE label1;        END IF;        LEAVE label1;    END LOOP label1;    SELECT * FROM ResultSet;    DROP TABLE IF EXISTS MySchemaNames;    DROP TABLE IF EXISTS ResultSet;END$$DELIMITER ;CALL MultipleSchemaQuery();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL