使用mysql

时间:2017-03-28 08:46:30

标签: php mysql database yii2 uid

我有两张桌子。

  • 动作
  • 公司

行动与company_id

的公司有关

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

例如:  有3家公司使用我的行动模块

公司 B公司 C公司

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

    • 现在我们已经分配了16到20的action_id

    • 因此,当我在 A公司中显示action_id时,它将显示在1- 10

    • 但在 B和C公司中,他们会显示错误ID。
    • 至于公司知识是他们创建的第一个行动,但action_id将显示为11,12等。
    • 如何解决此问题?
  4. 预期结果:

    enter image description here

2 个答案:

答案 0 :(得分:0)

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

- > mysql-concat-function

答案 1 :(得分:0)

在将新的ID插入表格时我会使用 $accessToken = null; if (is_object($response) && isset($response->access_token)) { $accessToken = $response->access_token; } elseif (is_array($response) && isset($response['access_token'])) { $accessToken = $response['access_token']; } if (isset($accessToken)) { return new FacebookSession($accessToken); ,这样您就可以确信自己有正确的计数:

INSERT...SELECT

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

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