【问题标题】:Help joining and filtering multiple tables with MySQL帮助使用 MySQL 加入和过滤多个表
【发布时间】:2010-01-12 00:49:15
【问题描述】:

我正在开发一个评论网站。基本上,您可以选择位置和业务类型,并可选择按各种业务属性过滤您的搜索结果。这里有五张牌桌:

企业

身份证 姓名 位置ID

地点

位置 ID 地点名称 状态

属性

属性ID 属性名

属性值

属性值ID 父属性 ID 属性值

业务属性

身份证 属性ID 属性值ID

所以我需要制定查询以使用(加入?)根据属性值在特定位置获取业务。

例如,我想在圣莫尼卡找一个理发师,具有以下属性:

价格:便宜 周末开放:是的 剪掉女性的头发:是的

这些属性存储在 Attributes 和 AttributeValues 表中,并链接到 BusinessAttributes 表中的业务。

假设我从搜索表单中获得了这些详细信息:

LocationID=5&Price=Cheap&Open_Weekends=Yes&Customs_Womens_Hair=Yes

我需要构建查询以返回与此位置和属性匹配的企业。

提前感谢您的帮助,我认为 StackOverflow 很棒。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    考虑到您的数据需求,您可能是面向无模式文档的数据库的理想人选。在最近的一期 .Net Rocks (link to show) 中,Michael Dirolf 谈到了他的项目MongoDB。

    据我了解,您可以获取每个业务实体并将其及其所有关联属性(LocationID、Price、Open_Weekends、Customs_Womens_Hair 等)存储在数据库中。由于没有模式,存储在存储中的每个实体都可以具有不同的属性组合。这本机完成了您尝试对 Attribute 和 Attribute_Value 表执行的操作。

    要搜索数据库,只需询问具有您需要的特定键和值集的所有实体。没有复杂的连接,也没有性能损失。您所做的正是无模式、基于文档的数据库的设计目的。

    Michael Dirolf:是的,我认为很多正在转换的人都陷入了使用关系数据库的困境,就像我们使用 MongoDB 一样。Richard Campbell: 对。
    Michael Dirolf: 所以有列,列键和单独的列值,并以这种方式插入内容以便完成在模式和各种类似疯狂的东西......
    Richard Campbell: 是的,现在回想起来,我突然意识到我只是在描述你的完美客户,一个滥用 SQL 的人正如他们所说的服务器。我们正在走这条有趣的道路,而你一开始就不应该在这里。

    如果你继续沿着构建关系属性/值存储的道路前进,你的表现将受到由此产生的组合爆炸的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多