我在mysql 5.1.41中有以下查询:
从information_schema.tables中选择不同的table_schema,其中table_schema类似于'%dog%';
我想获取该命令的输出:
+ ------------------- + | table_schema | + ------------------- + | dog_a | | dog_b | + ------------------- +
然后使用数据库名称作为查询的输入,如下所示:
选择count(*)从(从dog_a.log中选择*,其中insane = 1 UNION ALL从* dog_b.log中选择*,其中insane = 1)作为total_count;
因此该算法本质上是:
对于数据库中的每个数据库,计算疯狂的狗的数量,然后将所有数据库的总数相加。但是,我不知道如何包装两个查询以从第一个查询中获取数据库名称,并将其作为可迭代输入到mysql中的第二个查询中。
我需要能够完全在数据库中执行此操作。
有任何想法吗?
谢谢!
这样的事情可能会做。我还没有很多“带有日志的狗”来对此进行测试,但是我尝试了一个经过稍微编辑的版本,并且基本的想法似乎行得通。
在变量中建立查询字符串,然后使用准备好的语句执行它。
SELECT @query:=CONCAT( 'select count(*) from (' , GROUP_CONCAT( CONCAT( y.prefix, x.table_schema, y.postfix ) SEPARATOR ' UNION ALL ' ) , ') as total_count' ) FROM ( SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema LIKE '%dog%' ) AS x JOIN ( SELECT 'select * from ' AS prefix , '.log where insane = 1' AS postfix ) AS y ; -- SELECT @query AS Query; PREPARE STMT FROM @query; EXECUTE STMT; DEALLOCATE PREPARE STMT;