gpt4 book ai didi

php - MySQL 和 PHP : Searching for rows through a field in an undefined number of joined tables

转载 作者:行者123 更新时间:2023-11-29 14:56:38 25 4
gpt4 key购买 nike

有一个示例表“main_table”,其中包含字段“ID”、“some_data”。

有一个聚合表“agg”,其中包含字段“id”、“main_table_id”、“joinee_id”。

然后是最终表“joinee”,其中包含字段“id”、“email”。

表“main_table”和“joinee”通过“agg”处于多对多关系。

我希望能够通过“加入者”的“电子邮件”搜索所有“main_table”条目,而无需进行左连接,然后按“main_table”.“id”分组。最终结果需要列出所有“main_table”条目,每个条目一次。想象一下这样的 - 我希望“main_table”获得一个临时字段“participants”,其中包含所有“电子邮件” - 然后我会在执行此操作的同一查询中对此字段执行 LIKE 匹配,以便找到与我输入的电子邮件有关的“main_table”条目。

这可能吗?

请注意,这只是一个更大查询的片段。 “main_table”已与其他 5 个表连接,并且它们的字段已用作过滤器。问题是,我知道在每种情况下只能有一个连接表 - 对于“joinee”,连接条目的数量会有所不同。

谢谢。

最佳答案

关系模型不支持将行结果组合到单个单元格中,并且大多数 DBMS 都在这方面表现得非常糟糕。如果您要走这条路,则需要进行大量的黑客攻击,例如使用用户定义的函数或非标准语法功能来组合值。

但是如果我理解正确的话,您的问题是您需要在主表中查找在相关电子邮件行中具有所需条目的条目,而问题是存在多对多关系。

这个怎么样:

  1. 编写一个查询,查找您感兴趣的电子邮件,并在 agg 表上进行内联接。这将为您提供相关的 main_table_id。使用 distinctgroup by 删除 double 。
  2. 使用 1 中的查询作为子查询,然后将其插入到您现在拥有的查询中,使用类似 WHERE main_table.id IN (/* subquery */) 的内容,或者, 、内连接对步骤 1 中的子查询的现有查询。您使用哪一个取决于具体情况;传统上,子查询比联接慢(其他条件相同),但也可能相反,具体取决于您的结构和实际数据。在一些较旧的 DMBS 上,将子查询结果缓冲在临时表中可能是有益的。

关于php - MySQL 和 PHP : Searching for rows through a field in an undefined number of joined tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com