gpt4 book ai didi

mysql - 使用多个表的结果查询数据库?

转载 作者:行者123 更新时间:2023-11-30 23:28:02 25 4
gpt4 key购买 nike

周围有一些类似的问题,但它们并不是我要找的,所以如果您认为其他地方已经回答了这个问题,请原谅我。

我基本上是在寻找一种简单的方法来做事,因为我有超过 4000 个表可以从中获取数据。这是我之前的帖子的后续:mysql search for segment of table name

一般情况是我有一个充满表的数据库,我只想要其中的大约四分之一,即大约 4000 个表。由于我以前的帖子,我有一个单独的表名列表,但我想要它们附带的数据。我知道对于个人我可以做 SELECT table1.*, table2.*;或类似的东西,但我不想经历所有 4000 次左右。他们都以同样的事情结束,例如staff_name、manager_name、customer_name 这样我就可以使用

SHOW TABLES LIKE '%_name'

在数据库中查看我想要的表名。有人建议使用动态 mysql,但我什至不知道从哪里开始。有什么建议吗?

最佳答案

通用示例(在 PHP 中):

借助编程语言构建动态 SQL 或构建 SQL 查询看起来像这样(例如在 PHP 中):

$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();

$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);

fetchAll方法将返回一个数组,其中包含所选的每个表的名称。

implode($glue, $array)函数接受一个数组并使用 $glue 连接数组中的每个值参数 - 通常你会获取一组值并使用 $glue = ',' 对它们进行内爆创建以逗号分隔的值列表。

在我们的例子中 implode有部分查询为 $glue为了创造一大UNION JOIN查询。

一次决赛$query正在构建它应该看起来像:

SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name

结果应包含所有 DISTINCT来自所有 4000 个表的行。

具体示例(仅 SQL 格式):

SELECT    GROUP_CONCAT(
CONCAT('select * from ', table_name)
SEPARATOR ' union '
)
INTO @my_variable
FROM information_schema.tables
WHERE table_schema = 'dbname'
AND table_name LIKE '%_name';

PREPARE my_statement FROM @my_variable;
EXECUTE my_statement;
  • 第一个语句将从 information_schema 中获取所有表名数据库;
  • CONCAT函数在每个表名前加上前缀 'SELECT * FROM '字符串;
  • GROUP_CONCATimplode 的工作会用 PHP 完成;
  • INTO子句确保值保存在名为 my_variable 的变量中;

  • PREPARE语句接受一个字符串值(比如你在 my_variable 中保存的那个)并检查该值是否是一个 SQL 查询;

  • EXECUTE语句采用“准备好的语句”,然后......执行它。

@my_variable 是一个临时变量,但它只能是标量类型(varchar、int、date、datetime、binary、float、double 等),它不是数组。

GROUP_CONCAT函数是一个“聚合函数”,这意味着它采用聚合值(类似于数组的概念 - 在我们的例子中是查询的结果集)并输出一个简单的字符串结果。

关于mysql - 使用多个表的结果查询数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12173089/

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