mysql - 基于登录用户的MySQL变量数据库表
问题描述
我正在尝试创建一个标准视图,该视图将根据正在选择视图的 MySQL 用户动态选择不同的数据库表。在主数据库中
在 database_clients 我有一个表 users_list 如下:
user_mysql 公司 sample_user1 company1 sample_user2 company2
然后,我将 IDENTICAL 客户端数据库与 IDENTICAL 客户端特定表分开,例如:
database_company1.table1 数据库_company2.table1
目前,我在每个客户端数据库中复制 IDENTICAL 视图,这很麻烦,并且需要我在进行更改时单独更新每个数据库视图。我的目标是拥有一个“主”视图,用于查询每个客户端数据库中的表,数据库由 MySQL 用户登录名确定。
我发现您可以使用以下方式识别客户端数据库:
SELECT company
FROM database_clients.users_list
WHERE user_mysql = (SELECT SUBSTRING_INDEX(USER(), '@', 1));
我需要帮助的是尝试将其构建到主数据库客户端中的 VIEW 中。
当我尝试在 database_clients 中基于用户特定的条件构建“动态数据库”视图时,它会引发错误:
SELECT *
FROM concat(
'database_',
(
SELECT company
FROM database_clients.users_list
WHERE user_mysql = (
SELECT SUBSTRING_INDEX(USER(), '@', 1))
),
'.table1'
);
非常感谢任何指导!
凯文
解决方案
谢谢...我更接近但不完全在那里...如果您查看下面的存储过程,我不知道如何正确使用变量“company”,它通过第二个准备语句部分进行。 ....想法?
SET @usernames = (SELECT SUBSTRING_INDEX(USER(), '@', 1));
SET @firstQuery = (CONCAT("SELECT company FROM database_client.users_list where user_mysql = ","'", @usernames,"'"));
PREPARE company FROM @firstQuery;
EXECUTE company;
SET @finalQuery = (CONCAT("SELECT * FROM database_",company,".sample_table1"));
PREPARE stmt FROM @finalQuery;
EXECUTE stmt;
DEALLOCATE PREPARE company;
DEALLOCATE PREPARE stmt;
推荐阅读
- php - 如何让销售报告更“可扩展”?
- angular - ng-bootstrap typeahead: how to handle Observable
rather than Observable - java - 使用 Base64 编码的 JSF 图像下载保存到数据库
- php - MySQL / PHP 查询
- css - div 记录不使用 css 和引导程序显示在其他 div 内容前面
- python - python3中的唯一标识值
- r - 用 R 对股票市场进行回测
- django - 如何在 Django 2.1 中将多个 slug 添加到一个 url 路径中?
- java - 如何使用 Java 计算此文件中的整数个数?
- r - R-特定组内数据框中行的特定合并