php联表查询后结果,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值