php – 从表中查询,这是从Information_Schema.Tables结果派生的
作者:互联网
我不得不从一个有超过50个表的数据库进行查询 – 所有表都具有相同的结构(我知道,Horrid数据库设计来自一个已经生产了5年的遗留项目!).为此,我查询了information_Schema,如下所示:
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.tables
WHERE TABLE_SCHEMA =
'projectdatabase'
AND
TABLE_NAME LIKE '%_usertable'
在结果中,它为我提供了我需要的50个左右的表.现在,我需要从每个表中查询列,例如PRODUCT_ID.在这样做的过程中,我尝试过:
SELECT
projectdatabase.userTable.PRODUCT_ID
FROM (
SELECT
TABLE_NAME as userTable
FROM
INFORMATION_SCHEMA.tables
WHERE TABLE_SCHEMA =
'projectdatabase'
AND
TABLE_NAME LIKE '%_usertable'
) AS userTables
现在这显然不起作用,因为MySQL没有将’userTable’视为数据库表 – 但我正在尝试做的是查询* FROM {tablename}其中tablename是information_schema查询结果.
我可以尝试在PHP中拆分它,虽然我急切地想知道这是否可以在MySQL中进行.
解决方法:
你必须使用预备声明:
SET @sql:=(SELECT GROUP_CONCAT(
CONCAT("SELECT PRODUCT_ID FROM ", TABLE_NAME) SEPARATOR " UNION ")
FROM INFORMATION_SCHEMA.tables
WHERE TABLE_SCHEMA = 'projectdatabase'
AND TABLE_NAME LIKE '%_usertable');
PREPARE stmt FROM @sql;
EXECUTE stmt;
编辑:您也可以设置SET SESSION group_concat_max_len = 1000000;,但在SQL中执行所有操作都不是必须的.您的表列表是一种常量,查询将在您的PHP代码中处于更好的位置.
标签:php,mysql,subquery,information-schema 来源: https://codeday.me/bug/20190609/1205897.html