我正在使用一个约会类型的应用程序,该应用程序允许用户(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 。
(在我看来)这是查询/步骤,以生成相关理发师的列表:
在附近获得所有沙龙(简单字符串等于)
让发廊的id在上述沙龙工作
使用hairdressers_specialities_pivot表过滤hairdresser_id
获取美发师对象
返回美发师列表,每个列表都有相关的沙龙(通常只有1个沙龙,但并非总是如此)
我的订单可能完全错了,这就是为什么我在这里问的原因,构建查询的方式不一定(也可能不应该)是我认为的方式。重要的是结果。即使这是正确的,但一切都没有了。 3。
请注意,我们正在寻找的是理发师(人),而不是沙龙。
该应用程序会显示一个理发师列表,但是请记住,每个理发师都可以在同一家以及其他社区的多家沙龙工作。 我之所以提及这一点,是因为它是查询的关键部分之一。
在结果列表中单击美发师时,应用程序应知道是什么沙龙将美发师放入结果中,因此,在打开美发师资料时,会显示相关的沙龙信息(而不是其他随机信息)他/她正在工作的沙龙)。
是的,多个沙龙可以使理发师显示在列表中。不允许重复使用美发师,所以我正在考虑按美发师分组,对吗? 因此,每个美发师可以拥有多个沙龙的阵列(如果是这种情况),则应用程序会选择哪个更相关。
是的,我们需要同时拥有理发师对象(不仅是id)和沙龙对象。
是的,用户一旦在美发沙龙的个人资料(工作地点)上,便可以在其间切换。对于担心这一点的人来说值得一提,但这对问题没有影响。
谢谢您的时间!
编辑:而且,“ hairdressers_salons_specialities”三元数据透视表有任何帮助吗?使用一个有明显的缺点吗?
答案 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。