MySQL Query <table_name>基于列值返回

时间:2017-05-09 23:00:42

标签: mysql join database-design entity-attribute-value

这可能是一个荒谬的问题,有一个比我倾向于这里更直接的解决方案,但我希望有人可以给我一个很好的解决方案!

假设我有一个包含多个表的数据库,如下所示:

**table_users**:
id, username, email, password

*example*

testuser, testuser@test.com, 123456

**table_services**:
id, service_name

*example*

0, Shipping
1, Payments
2, Packaging

**table_markets:**
id, market_name

*example*

0, Fashion
1, Food
2, Healthcare

**table_user_attributes:**
user_id, table_name, attr_id

*example*

0, 'table_markets', 1
0, 'table_services', 0
0, 'table_services', 2

在此示例中,用户属性表的用户ID为0,与“Food”市场以及“Shipping”和“Packaging”服务相关联。

这个例子中我在这个属性列中有表名的原因是这些属性ID可以来自不同的表(在这种情况下是服务,市场),我需要知道哪个表查找attr_id for。< / p>

我的第一个问题是 - 我猜测我是以非常愚蠢的方式进行表名设置,是否有更好的方法来找到可能来自哪些表,然后才能使用在你的下一个查询中?

我的第二个问题是,假设这是正确的,我将如何设置查询来执行以下操作:

查找用户,获取用户ID,使用我收到的用户ID查找table_user_attributes中的所有条目,然后(这里是问题部分)获取表名并查询具有ID的那些...即:

SELECT table_users.username, table_users.id, table_user_attributes.table_name, 
table_user_attributes.attr_id 
FROM table_user_attributes 
INNER JOIN table_users ON table_user_attributes.user_id=table_users.id

如果我理解正确,该查询将获取用户信息,以及与该用户ID关联的table_user_attributes,但之后我不知道如何从此信息中提取相应的服务/市场。< / p>

我希望这是有道理的,这是一个奇怪的问题 - 基本上我的目的是将用户属性保存在一个表中,但是他们指向的ID可以来自多个不同的表,我需要一种方法来知道从哪个表与USER id关联的每个ID都来自于我可以查找并获取其名称。

问题可能进入:

数据库设计 - 我很确定这不完美(这也不存在,这是我写一个理论的例子,我还没有建立任何表,设置主键等等试图包装我首先围绕这个问题。

查询 - 这将根据设计而改变 - 但是,如果我使用上面的内容,我不知道id如何使该查询起作用。

可能会出错 - 所以任何帮助都非常感谢!

修改

我也意识到最简单(也可能是最好的)解决方案就是为每件事物设置一个单独的表格,例如:

table_user_services
table_user_markets

等 - 但我想我只想检查这是否是最有效的解决方案,或者这是否是一个更btree / sql友好的解决方案。

0 个答案:

没有答案