【问题标题】:Get Unique ID using the other column using mysql使用 mysql 使用另一列获取唯一 ID
【发布时间】:2017-03-28 08:46:30
【问题描述】:

我有两张桌子。

  • 动作
  • 公司

动作与company_id的公司相关

所以在操作表中,action_id 是主键并且自动递增。基于company_id 将显示信息。如果用户分配了company_id 1 并且他已登录,则他可以执行与company_id 1 相关的操作。不同的公司将有不同的操作,有很多action_ids。对于每家公司,我都想创建一个独特的action_id。我怎样才能做到这一点?

例如: 有 3 家公司在使用我的操作模块

A 公司B 公司C 公司

  1. 一家公司首先创建 10 个操作。
    • 现在我们在操作表中分配了从 1 到 10 的 action_ids。
  2. 现在 B 公司 创建 5 个操作。
    • 现在我们在操作表中分配了 11-15 的 action_id s
  3. 现在C公司创建5个动作。

    • 现在我们分配了 16-20 的 action_ids。

    • 所以当我在 A company 中显示action_ids 时,它将从 1-10 显示

    • 但是在B和C公司他们会显示错误的id。
    • 据公司所知,这是他们创建的第一个操作,但 action_id 将显示为 11、12 等等。
    • 我该如何解决这个问题?

预期结果:

【问题讨论】:

  • 这似乎是一个非常有缺陷的设计,没有更彻底的解释。你这样做的目的是什么?
  • 用现在提供的例子更新问题
  • 是的,但是例如,什么是动作?为什么需要根据公司 ID 和操作 ID 生成唯一编号?这是为了解决什么问题?
  • 它是我正在开发的一个模块。在公司中,他们可以创建操作来执行某些任务……就像项目管理工具一样
  • 那么您是否正在尝试为每个单独的公司获取一个连续的 ID?命名是为了什么?

标签: php mysql database yii2 uid


【解决方案1】:

您可以使用 concat(company_id , "_", action_id) 作为 unique_id

->mysql-concat-function

【讨论】:

  • 不,我想向用户展示它们,以便他们跟踪自己的行为......
【解决方案2】:

在向表中插入新的 id 时,我会使用 INSERT...SELECT,这样您就可以确保您有正确的计数:

INSERT INTO action (company_id, uid)
SELECT :company AS company_id, COUNT(*) + 1 AS uid
FROM action
WHERE action.company_id = :company

当然,这意味着删除后您的 id 将不再连续。如果您想自动生成唯一 ID,那么使用纯 sql 会变得更加棘手。老实说,此时我会使用数组索引(如果数字是重要部分)来命名,而不是手动存储它,特别是因为它是计算数据。

$actions = /* your actions retrieval, assume associative array */;
$actions[0]; //uid == 1, index == 0, etc

【讨论】:

  • 是的,这就是问题所在...我有 php 函数,它可以计算并添加到 uid 中,但在删除时它不是连续的...这就是我发布问题的原因。
  • if(count($company) > 0){ $model->action_uid = count($company)+1; }else{ $model->action_uid = 1; }
  • 对,那时我认为不使用 mysql 是有意义的。当您检索操作时,您已经拥有公司所有可用操作的完整数组。如果uid 的目的是为操作命名,则可以通过数组索引之类的方式来实现。如果您以后需要删除它,您已经拥有(完全唯一的)action_id。除此之外,我仍然看不到 uid 的任何用途。用户不必看到action_iduid,您可以向他们展示您喜欢的任何内容。
  • 它只是为了跟踪他们创建的操作数量(包括已删除的操作)
  • 您可以将数据库中的操作标记为“已删除”,而不是实际删除它。或者,如果它纯粹用于原始数字,则增加一个“动作”计数器。如果您仍在寻找更详细的答案,则需要进一步扩展您的问题(特别是关于这些 uids 如何向用户显示以及它们的具体用途)。
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 2019-07-01
相关资源
最近更新 更多