2010-02-04 70 views
1

到目前爲止,我所看到的一切都是關於自動刪除數據庫中的重複條目。我想強調在這個開始處數據庫中沒有重複數據。我還將從我仍然在學習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>與列出的同一個客戶端。

我明白爲什麼我的查詢返回兩行,這是有道理的。所以這裏有兩個問題:

  1. 是否有更好的數據庫/表設計,我應該使用,或更優化的查詢?
  2. 或者這是我應該在PHP中處理的東西?如果是這樣,是否有更優雅的解決方案將所有結果添加到數組中,然後循環遍歷數組並刪除重複項?

想法?

+1

究竟是你想用