问题标签 [multiple-tables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2176 浏览

mysql - 如何区分选择查询中两个表的相同字段名称?

我的数据库中有两个以上的表,它们都包含相同的字段名称,例如

我必须编写一个SELECT查询,从这 3 个表中获取几乎所有相同的字段。我正在使用这样的东西:

但是当我 printfield1的值时,它给了我最后一个表值。

如何获取具有相同字段名称的三个表的所有值?我是否必须为每个表编写单独的查询,或者有什么方法可以在单个查询中获取它们?

0 投票
1 回答
184 浏览

mysql - Mysql - 帮助我更改涉及多个连接和条件的搜索查询以获得所需的结果

关于系统:

  • 我们正在关注基于标签的搜索。

  • 导师创建包 - 为存储在tutors_tag_relations 中的导师和存储在 learning_packs_tag_relations 中的包标记关系。所有标签都存储在标签表中。

  • 系统有 6 个表格 - 导师、用户(链接到导师详细信息)、学习包、学习包_标签关系、导师标签关系和标签。

请运行以下新查询来设置系统:

导师 Vivian Richards 创建了两个 Learning_packs - “Cricket 1”(活动)和“Cricket 2”(非活动)。

要求:

现在我想搜索learning_packs,在搜索关键字上使用 AND 逻辑。帮助我修改以下查询,以便使用这些术语的任意组合进行搜索 - 包名称或导师姓名、姓氏会导致所有活动包(直接是那些包或由这些导师创建的包)。

==================================================== ================================= 1. 搜索“Vivian Richards”

2. 搜索“Cricket 1”

如您所见,搜索“Cricket 1”会返回该包,但搜索 Vivian Richards 不会返回相同的包。

0 投票
4 回答
13069 浏览

cakephp - Cakephp Auth 与多个“用户”表

我想知道如何只处理一个身份验证过程和多个表中的“用户”。我有 4 个用户表:用户、管理员、艺术家、团队管理员,它们都有特定的字段,但我希望所有这些用户都能够通过主页上的一个表单进行连接,然后被重定向到他们的特定仪表板。

我认为重定向不应该是一个问题,并且添加的一些路由应该可以工作,但我真的不知道从哪里看/开始让这一切成为可能。

干杯,
尼古拉斯。

编辑:这是最终解决方案(感谢 deizel)

0 投票
4 回答
121 浏览

optimization - Mysql - 帮我优化这个查询

关于系统:

- 系统共有 8 个表 - Users - Tutor_Details(Tutors 是 User 的一种,Tutor_Details 表链接到 Users) - learning_packs,(存储由导师创建的包) - learning_packs_tag_relations,(保存用于搜索的标签关系) - utors_tag_relations 和标签和订单(包含导师包的购买细节),order_details 链接到订单和tutor_details。

要更清楚地了解所涉及的表格,请查看最后的表格部分。

- 正在遵循基于标签的搜索方法。当新导师注册和导师创建包时创建标签关系(这使得导师和包可搜索)。有关详细信息,请查看标签如何在此系统中工作?以下。

以下是我试图优化的更复杂查询的更简单表示(不是实际的):-我使用explanation of parts了查询中的语句

==================================================== ===========================

==================================================== ====================

上面的查询是做什么的?

  • 是否对搜索关键字进行 AND 逻辑搜索(本例中为 2 - “民主”和“独裁”)。
  • 仅返回两个关键字都存在于两个集合中的那些导师 - 导师详细信息和导师创建的所有包的详细信息。

为了清楚起见 - 假设一个名为“Sandeepan Nath”的导师创建了一个包“我的第一个包”,那么:-

  • 搜索“Sandeepan Nath”会返回 Sandeepan Nath。
  • 搜索“Sandeepan first”会返回 Sandeepan Nath。
  • 搜索“Sandeepan second”不会返回 Sandeepan Nath。

==================================================== =====================================

问题

上述查询返回的结果是正确的(AND 逻辑按预期工作),但是在重负载数据库上查询所花费的时间大约为 25 秒,而正常查询时间为 0.005 - 0.0002 秒,这使得它完全无法使用。

由于尚未对所有可能的字段进行索引,可能会导致一些延迟,但我希望有一个更好的查询作为解决方案,尽可能优化,显示相同的结果

==================================================== =========================================

标签在这个系统中是如何工作的?

  • 当导师注册时,会输入标签并根据导师的详细信息(如姓名、姓氏等)创建标签关系。
  • 当导师创建包时,再次输入标签并根据包的详细信息(如包名称、描述等)创建标签关系。
  • 存储在tutors_tag_relations 中的导师的标签关系和存储在learning_packs_tag_relations 中的包的标签关系。所有单个标签都存储在标签表中。

==================================================== ===================

桌子

以下大部分表格包含许多其他字段,我在这里省略了。

==================================================== ==================================

以下是确切的查询(这也包括课程 - 导师可以创建课程并且搜索词与导师创建的课程相匹配):-

请注意 - 提供的数据库结构未显示此查询中的所有字段和表

==================================================== ====================================

解释查询输出:- 请看这个截图 http://www.test.examvillage.com/Explain_query.jpg

0 投票
3 回答
168 浏览

sql - Mysql - 帮我优化这个查询(改进的问题)

关于系统: - 有创建课程和包的导师 - 正在遵循基于标签的搜索方法。当新导师注册和导师创建包时创建标签关系(这使得导师和包可搜索)。有关详细信息,请查看标签在此系统中的工作原理部分?以下。

以下是有关查询

问题

上述查询返回的结果是正确的(AND 逻辑按预期工作),但是对于较重的数据,查询所花费的时间惊人地上升,而对于我拥有的当前数据,与订单的正常查询时间相比,它大约是 25 秒0.005 - 0.0002 秒,这使得它完全无法使用。

由于尚未对所有可能的字段进行索引,因此可能会导致一些延迟。标签表的标签字段被索引。查询有问题吗?执行时间超过 20 秒的原因是什么?

标签在这个系统中是如何工作的?

  • 当导师注册时,会输入标签并根据导师的详细信息(如姓名、姓氏等)创建标签关系。
  • 当导师创建包时,再次输入标签并根据包的详细信息(如包名称、描述等)创建标签关系。
  • 存储在tutors_tag_relations 中的导师的标签关系和存储在learning_packs_tag_relations 中的包的标签关系。所有单个标签都存储在标签表中。

解释查询输出:- 请看这个截图 - http://www.test.examvillage.com/Explain_query.jpg

0 投票
1 回答
226 浏览

mysql - 帮我更改这个复杂的查询以使用临时表

关于系统: - 有创建课程和包的导师 - 遵循基于标签的搜索方法。当新导师注册和导师创建包时创建标签关系(这使得导师和包可搜索)。有关详细信息,请查看标签在此系统中的工作原理部分?以下。

以下是相关查询 谁能帮我建议一种使用临时表的方法。我们已经为所有相关字段编制了索引,看起来这是使用这种方法的最短时间:-

问题

上述查询返回的结果是正确的(AND 逻辑按预期工作),但是对于较重的数据,查询所花费的时间惊人地增加,而对于我拥有的当前数据,与订单的正常查询时间相比,它大约是 10 秒0.005 - 0.0002 秒,这使得它完全无法使用。

有人在我之前的问题中建议执行以下操作:-

  • 创建一个临时表并在此处插入可能最终出现在最终结果集中的所有相关数据
  • 在此表上运行多个更新,一次加入一个所需的表,而不是同时加入所有表
  • 最后对该临时表执行查询以提取最终结果

所有这些都是在一个存储过程中完成的,最终结果已经通过了单元测试,并且速度非常快。

到目前为止,我从未使用过临时表。只有我能得到一些提示,一种示意图,这样我才能开始......

查询有问题吗?执行时间超过 10 秒的原因是什么?

标签在这个系统中是如何工作的?

  • 当导师注册时,会输入标签并根据导师的详细信息(如姓名、姓氏等)创建标签关系。
  • 当导师创建包时,再次输入标签并根据包的详细信息(如包名称、描述等)创建标签关系。
  • 存储在tutors_tag_relations 中的导师的标签关系和存储在learning_packs_tag_relations 中的包的标签关系。所有单个标签都存储在标签表中。
0 投票
2 回答
5315 浏览

doctrine - DQL 从多个表中删除(学说)

我需要从多个相关表中执行 DQL 删除。在 SQL 中是这样的:

我需要使用 DQL 执行此语句,但我坚持这一点。:(

但是 DQL 解析器给了我这个结果:

搜索谷歌和堆栈溢出我发现了这个(有用的)主题:
使用 Doctrine 在 MySQL 数据库上删除多表的语法是什么? 但这不完全是我的情况 - 从单个表中删除。

如果有办法覆盖 DQL 解析器行为?或者是否有其他方法可以使用学说从多个表中删除记录?

注意:如果您使用的是学说行为(Doctrine_Record_Generator),您需要首先初始化这些表,Doctrine_Core::initializeModels()以便对它们执行 DQL 操作。

0 投票
8 回答
215 浏览

database - 数据库设计 - 如何设置与 2 个表中的 1 个的 FK 关系?

跨多个数据库表维护唯一 ID 字段的最佳方法是什么?

我的数据库同时包含企业和人员,并且这两个实体都需要有一个与之关联的唯一 ID 字段。此外,还有其他表(例如地址)可以使用他们的 ID 作为外键来引用企业或个人。

我正在考虑的一些想法是:

  • 使用插入行时计算的非自动编号 ID 字段。这将解决我的唯一性问题,但是每当我想通过相关属性(例如通过地址)查找某些内容时,我都必须检查两个表,其中一个包含我正在寻找的记录。

  • 向自动编号 ID 添加前缀以标识要在哪个表中查找 ID,但是我在关联表中的 ID 字段可能会变成字符串或包含与它们关联的表的标志,我不确定这将如何影响性能。

  • 将人员和企业合并到一个表中。我的问题是人和企业有不同的属性,需要单独的字段,这违背了我的本性,因为我更喜欢为单独的实体提供单独的表。

  • 创建一个主表,其中包含一个唯一的 ID 字段、个人或业务的 ID 字段以及一个表明它是哪一个的标志。然后使用该 ID 作为我的外部参考 # 并在所有关联的表中。

  • 因为我不是 dba,所以我不知道一些更好的处理方法

无论我采用哪种解决方案,都需要能够轻松处理大量记录(这将要替换的数据库有几百万条记录)并且位于 MS Sql Server 上

0 投票
3 回答
5565 浏览

sql-server - 在 MS SQL 2005 或 2008 中自动递增多个标识列

我想在 MS SQL 中有两个不同的表,例如用户和组,它们都带有标识列。可以在两个标识列上创建自动增量吗?我想要第三个表,其中包含这两个表的公共信息,并且我想识别唯一记录。

在 Oracle 中是 SEQUENCE。

有可能做到吗?

谢谢,

马丁·皮尔奇

0 投票
2 回答
1373 浏览

sql - 在多个表上进行条件 mysql 连接的最有效方法?(Yii php 框架)

我有五张桌子:

  1. tab_template
  2. 模板组
  3. 团体
  4. 用户组
  5. 用户

Tab_template 使用 template_group 关系表组织成组。使用 user_group 关系表将用户组织成组。组可以是公共的或私有的(使用表中的 tinyint 布尔列)。

我想查询所有 tab_templates 是:

  1. 与用户在同一组中
  2. 或在公共组中

这是我当前的查询:

SELECT * FROM tab_template t
LEFT JOIN template_group
ON template_grouptab_template_id= tid
group
加入template_grouptab_template_id= groupid
LEFT JOIN user_group
ON TRUE
WHERE
groupprivate=0
OR
( template_group. group_id= user_group. group_id
AND
user_group. user_id=2)
分组tid;

它可以工作,而且它本身并不是超级慢,但是我加入 user_group 表的方式很hacky。

问题是我需要加入 user_group 表进行条件检查,但我只需要在组不是私有的情况下进行条件检查。

我知道我可以将另一个表添加到 FROM 子句 (FROM tab_template t, user_group ug) 中,而不是第三个 LEFT JOIN 与 ON TRUE 条件...但我不能这样做,因为 Yii 的 ActiveRecord 类与 DcCriteria 一起工作的方式我可以' t 修改语句的那部分。我可以编辑查询的任何其他部分,但不能编辑 FROM 子句。在此处查看 API:http ://www.yiiframework.com/doc/api/CDbCriteria 所以这就是我以我的方式加入 user_group 表的原因。一些 Yii 专家可能能够帮助我解决这个问题,但我不确定我的查询是否会通过 FROMing 表而不是 JOINing 来更快。

任何帮助将不胜感激!谢谢