基于多个枢轴筛选并合并2个表

时间:2019-05-22 18:23:38

标签: mysql query-optimization pivot-table query-builder query-performance

我正在使用一个约会类型的应用程序,该应用程序允许用户(1)根据他们的专业ID搜索附近的理发师(2)(3)

我完全不懂MySQL。我知道一些简单的查询,WHERE,简单的INNER JOIN,但仅此而已,我知道这需要一个非常了解他的查询和MySQL的人。

因此,基本上这些是我们正在影响的相关表格:沙龙理发师 hairdressers_salons_pivot hairdressers_specialities_pivot

I。 沙龙表具有以下相关列: id 邻居

II。 理发师表具有以下相关列: id

III。 hairdressers_salons_pivot表包含以下列: salon_id hairdresser_id

IV。 hairdressers_specialities_pivot表包含以下列: hairdresser_id speciality_id

V。我还提到了特色表(尽管未使用): id 名称

我们用于查询的数据是:邻居 specialty_id

(在我看来)这是查询/步骤,以生成相关理发师的列表:

  
      
  1. 在附近获得所有沙龙(简单字符串等于)

  2.   
  3. 让发廊的id在上述沙龙工作

  4.   
  5. 使用hairdressers_specialities_pivot表过滤hairdresser_id

  6.   
  7. 获取美发师对象

  8.   
  9. 返回美发师列表,每个列表都有相关的沙龙(通常只有1个沙龙,但并非总是如此)

  10.   

我的订单可能完全错了,这就是为什么我在这里问的原因,构建查询的方式不一定(也可能不应该)是我认为的方式。重要的是结果。即使这是正确的,但一切都没有了。 3。

请注意,我们正在寻找的是理发师(人),而不是沙龙。

该应用程序会显示一个理发师列表,但是请记住,每个理发师都可以在同一家以及其他社区的多家沙龙工作。 我之所以提及这一点,是因为它是查询的关键部分之一。

在结果列表中单击美发师时,应用程序应知道是什么沙龙将美发师放入结果中,因此,在打开美发师资料时,会显示相关的沙龙信息(而不是其他随机信息)他/她正在工作的沙龙)。

是的,多个沙龙可以使理发师显示在列表中。不允许重复使用美发师,所以我正在考虑按美发师分组,对吗? 因此,每个美发师可以拥有多个沙龙的阵列(如果是这种情况),则应用程序会选择哪个更相关。

是的,我们需要同时拥有理发师对象(不仅是id)和沙龙对象。

是的,用户一旦在美发沙龙的个人资料(工作地点)上,便可以在其间切换。对于担心这一点的人来说值得一提,但这对问题没有影响。

谢谢您的时间!

编辑:而且,“ hairdressers_salons_specialities”三元数据透视表有任何帮助吗?使用一个有明显的缺点吗?

1 个答案:

答案 0 :(得分:0)

我在评论中的第二个建议是这样的:

SELECT h.id,hsal.salon_id,s.neighborhood,hspec.speciality_id
      FROM hairdressers h 
      LEFT JOIN hairdressers_specialities_pivot hspec ON h.id=hspec.hairdresser_id
      LEFT JOIN hairdressers_salons_pivot hsal ON h.id=hsal.hairdresser_id
      LEFT JOIN salon s ON hsal.salon_id=s.id 
ORDER BY h.id;

我已经编辑了初始查询建议,以包括所有表格。至于要在SELECT中返回的字段,我在此示例中定义以显示来自何表的哪个字段。我还为此测试创建了一个小提琴:You can check the fiddle here