0

有一个类似的问题,但我不能让它工作。我有 2 个数据库。db 1 有用户名

例如

userdb.usertable.username

db 2 为每个被调用的用户提供配置表

"their username" + _Config

我正在尝试运行一个查询,该查询将遍历特定类型的所有用户,获取他们的用户名,然后从他们自己的配置表中提取一个值。

这很接近,但仅适用于 1 个用户。

SET @username:=(SELECT userdb.usertable.username FROM userdb.usertable WHERE version="free" );

SET @table:=concat(@username,"_Config");

SET @sql_text =concat("SELECT * FROM configdb.",@table);

PREPARE stmt FROM @sql_text;

EXECUTE stmt;

任何帮助,将不胜感激。

4

1 回答 1

0

首先: 立即摆脱这个数据库设计。

99% 的情况下,一个应用程序不需要两个数据库。

在继续之前,您可能也想看看这个。

其次,它应该是这样的:

Users_Table
id,username,(more user detail fields),config_value_1,config_value_2

将所有用户数据保存在一个表中,除非用户可以为配置参数设置多个值。然后你需要一个像这样的连接表

Users_Table
id,username,other fields

Config_Value_1_Table
value_id,name

Config_Value_1_Users
user_id,value_id

一个常见的现实世界示例可能如下所示:

users
id,first_name,last_name,username,password_hash,password_salt,email,is_admin,is_banned,is_active

locations
id,location_name

user_locations
user_id,location_id

那么您所要做的就是编写一个非常简单的查询来获取所有用户数据

于 2013-01-31T16:10:56.373 回答