到目前爲止,我所看到的一切都是關於自動刪除數據庫中的重複條目。我想強調在這個開始處數據庫中沒有重複數據。我還將從我仍然在學習RDBMS設計,規範化,關係和最重要的SQL的事實入手。導致重複行返回的一對多鏈接表
我有一個客戶端表,有一個clientid(PK)和一個client_name。我有一個角色表,帶有一個roleid(PK)和一個role_name。任何客戶端都可以有多個與之關聯的角色。所以我創建了一個client_role_link表,其中clientid和roleid作爲兩個字段。然後我運行這個:
SELECT client.client_name, role.role_name FROM client
LEFT JOIN client_role_link ON client_role_link.clientid=client.clientid
LEFT JOIN role ON client_role_link.roleid=role.roleid
WHERE (role.roleid='1' OR role.roleid='2')
因此,假設我有一個客戶端有兩個角色與它相關聯(角色'1'和'2')。該查詢返回兩行,每個角色一個。當我得到這些結果時,我使用一個while
循環來遍歷結果並將它們輸出到<select>
列表中。然後導致兩個<option>
與列出的同一個客戶端。
我明白爲什麼我的查詢返回兩行,這是有道理的。所以這裏有兩個問題:
- 是否有更好的數據庫/表設計,我應該使用,或更優化的查詢?
- 或者這是我應該在PHP中處理的東西?如果是這樣,是否有更優雅的解決方案將所有結果添加到數組中,然後循環遍歷數組並刪除重複項?
想法?
究竟是你想用
我想僅顯示具有特定角色的客戶端並讓他們可選。實際上我並不需要在這個特定的實例中提取角色名稱。 – 2010-02-04 18:12:42