mysql:从另一个查询中获取表名

时间:2013-01-31 16:03:35

标签: mysql join concat

有类似的问题,但我无法让它发挥作用。我有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;

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先关闭: 立即获取此数据库设计。

99%的时间您不需要为单个应用程序使用两个数据库。

在继续前进之前,您可能还需要查看this

第二个,它应该是这样的:

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

将所有用户数据保存在一个表中,除非用户可以为config参数设置多个值。那么你需要一个像这样的联结表

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

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