首页 > 解决方案 > SQL:从名称以“_reports”结尾的多个表中选择 *

问题描述

所以我在一个网站上工作,人们可以在某个频道中放置文本和图像,为了防止不需要的帖子,我创建了一个报告按钮。当按下时,表格中将插入一个新行*random_code*_reports,该频道的管理员可以对它们做出反应。

但是,站点所有者也应该能够对它们做出反应,但是我无法进行有效查询来选择所有random_code _reports 表的所有报告

因此,需要明确的是,当创建通道时,将创建几个表:

$code."_posts"

$code."_files"

$code."_comments"

$code."_likes"

$code."_reports"

其中代码是 6 个字符的随机值。

是否有某种类似的功能可以选择名称中带有“_reports”的某些表?

标签: mysql

解决方案


没有可供选择的 SQL 标准FROM %_table

请参阅:可以使用表通配符创建 sql 查询吗?

您必须首先通过查询某种元信息来简单地选择所有表。

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%_reports';

(注意,这是特定于 mysql 的,其他数据库服务器有其他查询可用表的方法)

您可以将数据重新组织到多个数据库中,而不是表前缀,然后使用

SELECT * FROM $random_code.reports

通过这种方式,您可以将具有大量数据的整个数据库移动到它们自己的服务器上,并调整您的连接字符串以查找哪些通道与哪些服务器相关联(称为单租户数据库)

或者,您可以将随机代码添加为列,有时称为描述符列或多租户数据库。

SELECT * FROM reports where channel_code = '$random_code'

SELECT count(*) FROM reports group by channel_code


推荐阅读