我們正在計劃使用類似於該網站上實施的標籤系統。處理標籤
我們有實際的標記前端和自動完成等工作。
但我很困惑,因爲最好的方式來處理它的後端。
基本上,當我們得到我們最終得到一個數組,看起來像後臺標籤:
array(
array(
'value' => 1,
'label' => 'First Tag'
),
array(
'value' => 2,
'label' => 'Second Tag'
),
array(
'value' => 'Third Tag',
'label' => 'Third Tag'
),
array(
'value' => 3,
'label' => 'Fourth Tag'
),
)
的標記插件也收到相同的陣列格式json_encode()
「通過AJAX當d它自動填充,它顯示標籤,並存儲該ID,以便它可以將其發回。
因此,值爲1
,2
,3
的標籤是從自動填充中選擇的標籤。
值爲Third Tag
的標記是未從自動填充中選擇的標記,可能已存在於數據庫中,但可能尚未存在但已手動輸入。
現在有變化,用戶實際上可以創建恰好是數字的標籤,因此
array(
'value' => 3,
'label' => 3
)
能來通過,但尚未存在,所以我們不能想當然地認爲,如果值是一個int然後它已經存在。
所以,這個問題的第一部分是,我如何管理這個,所以我沒有結束重複標籤?
我目前的做法是,當在標記插件通過自動填充請求標籤我發回的陣列等
(術語=「銷」)
array(
array(
'value' => '||1',
'label' => 'pink'
),
array(
'value' => '||4',
'label' => 'pin cushion'
)
)
,然後在後端只是假設任何具有以||開頭的值的標籤來自自動完成並已經存在。
然後, 我們查詢所有標籤數據庫, 與我們檢查,看看是否在value
存在數組的label
鍵,如果它不,我們只是離開它是標籤的休息,如果它不」我們創建它,然後我們用原始數組中的新id
轉換出該值。
但是,這對我來說很不好,這意味着我們正在使用填充項目(||
),必須有一個更優雅的方式來做到這一點?
問題的下一部分是,實際上將這些標籤鏈接到一個項目。 這是更多在編輯本網站上的問題的情況下,
一些標籤已經鏈接到一個問題。你如何處理它,這樣你就不會在一個問題上得到重複的標籤引用?
到目前爲止,我看到兩個選項: 刪除問題中所有標籤的鏈接,然後再將其全部插入。(2個查詢)
或
查詢數據庫中與問題連接的所有標記,遍歷數組從數組中移除這些標記,然後插入餘數。 (2 queries)
是哪種方法比其他方法更好?還是有第三個版本?