2017-03-28 44 views
0

我有兩個表。使用其他列使用mysql獲取唯一ID

  • 行動
  • 公司

行動是由company_id

相關的公司,所以在動作表,action_id是主鍵和自動遞增。根據company_id將顯示信息。如果用戶有company_id 1已分配給他,並且他已登錄,他可以執行與company_id 1相關的操作。不同的公司將採取不同的操作,其中包括許多action_id s。對於我想要創建獨特的action_id的每個公司。我怎樣才能做到這一點?

例如: 有3家企業使用我的行爲模塊

一個公司B企業丙公司

  1. 一家公司創建前10分的動作。
    • 現在我們有action_id s從1-10分配到動作表中。
  2. 現在B公司創建5個動作。
    • 現在我們已經從11-15 action_id的分配的行動中表
  3. 現在丙公司創建5個動作。

    • 現在我們有action_id從16-20分配。

    • 所以,當我顯示action_id S IN 一個公司它將從1-10

    • 顯示但在B和C公司他們將有過錯顯示的ID。
    • 只要公司的知識是他們創建的第一個動作,但action_id將顯示爲11,12等等。
    • 我該如何解決這個問題?

預期結果:

enter image description here

+1

這似乎是一個真正有缺陷的設計,沒有一個更透徹的解釋。你在做什麼試圖達到什麼目的? – Rogue

+0

現在提供的例子更新了問題 –

+0

是的但是例如,什麼是行動?爲什麼需要根據公司ID和操作ID生成唯一的號碼?這試圖解決什麼? – Rogue

回答

0

您可以使用CONCAT(COMPANY_ID, 「_」,的action_id)爲UNIQUE_ID

- >mysql-concat-function

+0

不,我想顯示他們給用戶,以便他們有他們的行爲跟蹤.... –

0

我會用INSERT...SELECT將新ID插入表格時,以便您可以放心e合適的計數:

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 
+0

是的,這是問題......我有PHP函數,它的重要性,並添加在UID中,但刪除它不是連續的......這就是爲什麼我發佈的問題。 –

+0

if(count($ company)> 0){model-> action_uid = count($ company)+1; } else { $ model-> action_uid = 1; } –

+0

正確的,在這一點上,我認爲這是不合理的。當您檢索這些操作時,您已經擁有了該公司所有可用操作的整個陣列。如果'uid'的目的是爲了命名動作,你可以通過類似於數組索引的方式來實現。如果你需要稍後刪除它,你已經有了(完全唯一的)'action_id'。除此之外,我還沒有看到「uid」的任何目的。用戶不必看到'action_id'或'uid',你可以隨心所欲地顯示它們。 – Rogue