我正在尝试创建一个标准视图,该视图将根据选择视图的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;