我需要提取像这样的具有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()
(不推荐使用)我可以获取表和字段名称,但是如何提取数据库名称?
答案 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。)