视图中基于登录用户的MySQL变量数据库表



我正在尝试创建一个标准视图,该视图将根据选择视图的MySQL用户动态选择不同的数据库表。在主数据库中

在database_clients中,我有一个users_list表,如下所示:

user_mysql公司sample_user1公司1sample_user2 company2

然后,我有单独的IDENTIAL客户端数据库和IDENTIAL特定于客户端的表,例如:

数据库_公司_表1数据库_公司2.表1

目前,我在每个客户端数据库中复制IDENTIAL视图,这很麻烦,需要我在进行更改时单独更新每个数据库视图。我的目标是拥有一个"主"视图,用于查询每个客户端数据库中的表,数据库由MySQL用户登录决定。

我已经发现,你可以使用这样的东西来识别客户端数据库:

SELECT company 
FROM database_clients.users_list
WHERE user_mysql = (SELECT SUBSTRING_INDEX(USER(), '@', 1));

我需要帮助的是尝试将其构建到master database_clients中的VIEW中。

当我尝试在database_clients中基于用户特定的crieteria构建"动态数据库"VIEW时,它会抛出错误:

SELECT * 
FROM concat(
    'database_',
    (
        SELECT company 
        FROM database_clients.users_list 
        WHERE user_mysql = (
            SELECT SUBSTRING_INDEX(USER(), '@', 1))
    ),
    '.table1'
);

非常感谢任何指导!

Kevin

谢谢。。。我离得更近了,但还没到。。。。如果你看看下面的存储过程,我不知道如何正确使用变量"company",直到它进入第二个prepare语句部分。。。。。想法?

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;

最新更新