我有1个带有2个表的Mysql数据库:
文献 ... - staffID .....
职工 - ID - 姓名
DOCUMENTS表将每个文档分配给STAFF表中的一个或多个用户,因此DOCUMENTS表中的staffID由逗号分隔的人员ID数组组成,例如(2,14)。
我设法将数组拆分为单独的值:
但是我没有拥有ID号码,而是希望从STAFF表中获得实际名称 - 我怎样才能实现这一目标。任何帮助将不胜感激 - 请参阅下面的我当前的代码。
$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 :(得分: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
。
答案 1 :(得分: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;
DOCUMENTS表通过STAFF表中的查找表(下拉列表)进行读取,以便我可以将多个工作人员分配给文档。所以我可以访问DOCUMENTS表中的staffID数组并拆分它,我想知道是否有办法将staffID与staff.Name相关联并打印出人员名称而不是查询结果中的ID。再次感谢!