使用SQL搜索具有动态属性的用户

时间:2014-01-16 07:32:28

标签: sql sql-server

。我正在使用Asp和SQL-Server,我编写动态查询没有问题

我正在尝试编写搜索页面以搜索人员。

我有3个相关的表格: 请参阅我的表格图:http://tinypic.com/r/21159go/5

我要做的是设计一个人可以搜索具有动态数量属性的用户的搜索页面。

实施例: 认为名为“User1”的用户名在“UserAttributes”表中有3个名为“Attr1”,“Attr2”和“Attr3”的属性,“User2”有3个名为“Attr1”,“Attr2”和“Attr4”的属性。 与“搜索”功能无关的属性名称和其他一组项目保存在“属性”表中。这是因为我想在多个用户之间关联属性。并且它们的值存储在“UserAttributes”表中。 好吧有人想搜索“Attr1”和“Attr2”并希望返回具有特定值的“Attr1”和“Attr2”的所有用户。

我需要一个查询来了解如何实现它。我可以用asp.net写一个动态查询,所以如果有人请给我一个查询我带来的这个例子,我会很感激

P.S。这不是我真正的数据库。我真正的数据库要复杂得多,并且有更多的字段和表格,但我只是剪切它并只带来必要的项目。因为属性非常动态,所以它们不能嵌入表列中。

提前致谢

1 个答案:

答案 0 :(得分:0)

根据您的数据库图表,您的代码将是这样的

<强>更新

SELECT u.*
FROM users AS u
LEFT OUTER JOIN UserAttributes AS ua1
    ON u.USER_ID = ua1.USER_ID
LEFT OUTER JOIN UserAttributes AS ua2
    ON u.USER_ID = ua2.USER_ID
WHERE (
        ua1.attribute_id = 'att1'
        AND ua.attribute_value = 'MyValue' )
    AND (
        ua2.attribute_id = 'att2'
        AND ua.attribute_value = 'MyValue2' )

在where子句中,您将指定attirbute_Id以及您期望的值。不仅仅是决定是否要限制用户使所有值匹配或只是其中一个,在这种情况下,在语句之间修改ANDOR

  • 如果你只想快速而又脏,你可以创建自己的类库,可以创建将传递给数据库的adhoc sql。
  • 如果你想要更有组织的事情,创建SP将带回用户并接受任何id和值的遗留。通过传递以逗号,冒号或分号分隔的列表来做很多事情。然后将其拆分为SP并根据这些值过滤结果
  • 还有许多其他选择,例如EntityFramework,LINQ-to-SQL和其他选项,只需要弄清楚什么最适合你,你想花多少时间以及以后支持多么容易。