資料庫規範化對於高效的資料管理至關重要,但有時,專案可能需要以非規範化形式處理遺留資料。本文探討了一種在給定列中連接兩個以逗號分隔值的表的技術。
場景:
假設我們有兩個表:
註解表:
職位表:
我們的目標是連接這些表並將forDepts 欄位與Positions 表中的值關聯起來,建立一個包含以逗號分隔的職位名稱的新欄位。
解法使用CONCAT_WS:
SELECT n.nid, CONCAT_WS(', ', p.name) AS DepartmentName FROM Notes n JOIN Positions p ON n.forDepts = p.id
但是,此方法只會擷取每個部門ID 的第一個符合項,而不是所有符合的部門。
使用 FIND_IN_SET 的解決方案:
SELECT a.nid, GROUP_CONCAT(b.name ORDER BY b.id) AS DepartmentName FROM Notes a INNER JOIN Positions b ON FIND_IN_SET(b.id, a.forDepts) > 0 GROUP BY a.nid
FIND_IN_SET 函數檢查某個值是否存在於以逗號分隔的字串。透過在 JOIN 條件中使用它,我們確保包含所有匹配位置。 GROUP_CONCAT 函數連接檢索到的職位名稱,並以逗號分隔。
PHP 程式碼整合:
可以修改給定的 PHP 程式碼以透過替換來擷取擴充的 DepartmentName 列mysql_query 語句中的查詢與上面建議的解決方案。這將使程式碼能夠正確導出以逗號分隔的位置名稱。
注意:
雖然標準化資料庫是理想的選擇,但有時需要處理非標準化資料。本文討論的技術提供了一種在此類場景中有效連接表和聚合逗號分隔值的解決方案。
以上是如何在列中連接具有逗號分隔值的表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!