2010-09-11 42 views
2

我有1個Mysql數據庫2個表:PHP/MySQL的:讀取查找表數據字段值(分割陣列)

文獻 ... - STAFFID .....

職工 - ID - 名稱

的文件表中的每個文檔指派給單個或多個用戶從在DOCUMENTS表工作人員表因此STAFFID由員工ID的例如(2,14)以逗號分隔的陣列組成。

我設法分割陣列分成單獨的值:

但不是具有ID號我想有從工作人員表的實際名稱 - 我怎麼能做到這一點。任何幫助將不勝感激 - 請參閱下面我目前的代碼。

$result = mysql_query("SELECT 
    organizations.orgName, 
    documents.docName, 
    documents.docEntry, 
    documents.staffID, 
    staff.Name, 
    staff.ID 
FROM 
    documents 
    INNER JOIN organizations ON (documents.IDorg = organizations.IDorg) 
    INNER JOIN staff ON (documents.staffID = staff.ID) 
") 
or die(mysql_error()); 


while($row = mysql_fetch_array($result)){ 
    $splitA = $row['staffID']; 
    $resultName = explode(',', $splitA); 
    $i=0; 

    for($i=0;$i<count($resultName);$i++) 
    { 
     echo "<a href='staffview.php?ID=".$row['docName']. 
      "'>". $resultName[$i]."</a><br>"; 
    } 

    echo '<hr>'; 

} 
+0

我更新我的回答顯示完整查詢我的初衷。如果您不需要員工編號,您可以省略它。從員工表中選擇記錄對組織有任何意義嗎? – 2010-09-13 12:42:57

+0

順便說一句 - 可能更好的編輯額外的信息到你原來的問題,而不是發佈更新作爲答案! – 2010-09-13 12:44:20

回答

1

它看起來像你的現有代碼可能工作,其中documents.staffID = staff.ID - 這是那裏是剛與文檔相關的單一,STAFFID?

您最好添加一個表來對文檔和工作人員之間的關係進行建模,並刪除或棄用文檔表中的staffID字段。你會需要像

CREATE TABLE document_staff (
    document_id <type>, 
    staff_id <type> 
) 

可以包括複合索引與(document_id, staff_id)(staff_id, document_id)如果你有大量的數據和/或要有效地穿越在兩個方向上的關係。

(你不提您的身份信息字段的數據類型,但documents.staffID似乎是某種VARCHAR的基礎上,你說什麼? - 也許你可以使用這些整數類型,而不是)

你大概可以達到你想要什麼使用現有的架構和MySQL FIND_IN_SET功能:

SELECT 
    organizations.orgName, 
    documents.docName, 
    documents.docEntry, 
    documents.staffID, 
    staff.Name, 
    staff.ID 
FROM 
    documents 
INNER JOIN organizations ON (documents.IDorg = organizations.IDorg) 
INNER JOIN staff ON (FIND_IN_SET(staff.ID, documents.staffID) > 0) 

MySQL的設置類型有限制 - 64例如最大隸屬大小 - 但可能滿足您的需求是足夠的。

如果是我雖然,我會改變模型,而不是使用FIND_IN_SET

0

非常感謝你的回答 - 非常感謝! 我的表設置爲:

文件:

CREATE TABLE documents (
    docID  int NOT NULL, 
    docTitle mediumblob NOT NULL, 
    staffID varchar(120) NOT NULL, 
    Author2 int, 
    IDorg  int, 
    docName varchar(150) NOT NULL, 
    docEntry int AUTO_INCREMENT NOT NULL, 
    /* Keys */ 
    PRIMARY KEY (docEntry) 
) ENGINE = MyISAM; 

工作人員:

CREATE TABLE staff (
    ID   int AUTO_INCREMENT NOT NULL, 
    Name   varchar(60) NOT NULL, 
    Organization varchar(20), 
    documents  varchar(150), 
    Photo   mediumblob, 
    /* Keys */ 
    PRIMARY KEY (ID) 
) ENGINE = MyISAM; 

文件表通過從STAFF表的查找表(下拉)讀取,這樣我可以分配多個員工成員到文檔。所以,我可以訪問陣列STAFFID在DOCUMENTS表和拆分,我不知道是否有一種方法,則與STAFFID的staff.Name關聯,並打印出來的人員名稱,而不是在查詢結果的ID。再次感謝!