【发布时间】:2022-07-05 18:44:26
【问题描述】:
我有一个包含很多用户(模式)的数据库,例如:
- user_1
- user_2
- user_3
- ...
- user_303
所有这些都有相同的表,例如:
CREATE TABLE `messages` (
`id` int(11) NOT NULL,
`content` text COLLATE utf8mb3_unicode_ci NOT NULL,
`date` datetime NOT NULL,
`viewed` int(11) NOT NULL,
`forId` int(11) NOT NULL,
`fromId` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
INSERT INTO `messages` (`id`, `content`, `date`, `viewed`, `forId`, `fromId`) VALUES
(1, 'Hello World', '2020-06-04 14:49:17', 1, 2106, 1842),
(2, 'Hi there', '2020-06-04 14:49:39', 1, 2106, 1842),
(3, 'test 1', '2022-01-03 11:40:43', 1, 3006, 3006),
(4, 'Test 2', '2022-01-20 12:01:52', 1, 1842, 1842);
我想要的是一个查询,例如:
USE user_1, user_2, user_3;
SELECT * FROM `messages` WHERE `content` LIKE `%Hi%`;
我不知道这是否可以作为 SQL 查询,另一种选择是编写一个带有 for each 循环的小型 PHP 代码,但我想要一个命令,所以我得到了所有用户的列表:user_1 till user_303
用户不是从1到303有一些用户被删除,可能是user_200不存在了。
希望有人能帮帮我
【问题讨论】:
-
您应该有一个通用的消息表 - 供所有用户使用。
-
我同意 jarlh,将用户属性添加到消息并为所有消息使用一个表。也就是说,您可以将架构作为
select table_schema from information_schema.tables where table_name = 'MESSAGES'获取,然后循环或创建联合查询。 -
我有一个包含很多用户(模式)的数据库 你的意思是有很多用户,每个用户都使用自己独立的数据库吗? 我不知道这是否可能 不,这是不可能的。但是您可以在查询中访问来自不同数据库的表,例如:
SELECT * FROM db1.table UNION ALL SELECT * FROM db2.table;。 -
一个合格的表名可以包括架构,例如 user_1.messages、user_2.messages 等,您不必切换架构来执行此操作..如果架构数量容易更改以实现灵活性动态sql 会帮助dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html
-
这是一个非常糟糕的数据库设计,所以最好花点时间修改你的设计,然后查询会很容易