gpt4 book ai didi

php & mysql : Get the list of database, 通过查询提取的表和字段

转载 作者:行者123 更新时间:2023-11-29 09:55:17 25 4
gpt4 key购买 nike

我需要提取由这样的查询提取的数据库、表和字段的列表,这样有2个单独的数据库数据库“客户”包含带有客户列表的“注册”表数据库“供应商”包含带有供应商列表的“注册”表

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

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 的列表。表名。 field_name 由查询提取

即:

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

有没有办法通过php脚本获取上面的列表?

通过(已弃用)mysql_field_table()mysql_field_name() 我可以获取表和字段名称,但如何提取数据库名称还有?

最佳答案

MySQL 的 information_schema 数据库(一个假数据库,您无法直接插入、更新或删除)保存此类数据。

例如

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

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

您可以使用 SELECT database() 获取当前数据库(最近一次使用 USEwhatever 操作的主题。

获取构成 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

这具有使用源数据库注释列名称的效果。 (但这是一个黑客行为。)

关于php & mysql : Get the list of database, 通过查询提取的表和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com