php&mysql:获取查询提取的数据库,表和字段的列表

时间:2018-12-28 10:48:17

标签: php mysql sql

我需要提取像这样的具有2个单独的数据库的查询所提取的数据库,表和字段的列表 包含表“ register”以及客户列表的数据库“ customer” 包含表“ register”和供应商列表的数据库“供应商”

某些客户也是供应商,我需要提取“名称” +进出资金。 在这种情况下(如果客户也是供应商),他们将共享相同的“ id”密钥。

select
   C.name, C.surname,
   C.balance as MONEY_IN, S.balance as MONEY_OUT
from
   customer.register C, supplier.register S
where
   C.id = S.id

我想要获取的是一个由查询提取的database_name . table_name . field_name的列表

即:

customer.register.name
customer.register.surname
customer.register.balance
supplier.register.balance

是否可以通过php脚本获取以上列表?

通过mysql_field_table()mysql_field_name()(不推荐使用)我可以获取表和字段名称,但是如何提取数据库名称

1 个答案:

答案 0 :(得分:1)

MySQL的information_schema数据库(一个伪造的数据库,您不能直接插入,更新或删除)保存这种数据。

例如

 SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
   FROM information_schema.COLUMNS
  WHERE TABLE_SCHEMA = database()

检索当前数据库中所有表和列的名称。

您可以获取当前数据库(最USE whatever操作中使用SELECT database()的主题。

获取组成SELECT查询的列名的麻烦是:SELECT查询本身会生成一个虚拟表。因此,如果来自SELECT查询的列与进入查询的列具有相同的名称,则可以肯定地获得其列名称。 SELECT * FROM table生成这种结果集。

在PDO中,getColumnMeta(column_number)为您返回结果集的一些元数据。在mysqli_中,它是fetch_fields()

在特定情况下,您需要连接来自不同数据库的两个表。元数据可以为联接中的列提供表名和列名。但是MySQL不会在结果集中传递数据库名称。

您可以使用类似这样的别名。

select  a.field_1 AS db_1_field_1, 
        a.field_2 AS db_1_field_2, 
        b.field_3 AS db_2_field_3
  from  db_1.table_1 a 
  join  db_2.table_2 b ON a.field_9 = b.field_9

这具有在源数据库中注释列名称的效果。 (但这是一个hack。)