我有一个mysql数据库,其中有两个表:
文件
…
-石板
……
工作人员
-身份证
-姓名
document s表将每个文档分配给staff表中的一个或多个用户,因此documents表中的staff id由一个逗号分隔的staff id数组组成,例如(2,14)。
我成功地将数组拆分为单独的值:
二
14个
但是,我不想有身份证号码,而是想有员工表中的实际姓名——我如何才能做到这一点。任何帮助将非常感谢-请看我目前的代码如下。
$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>';
}
最佳答案
看起来,您现有的代码可能在documents.staffID = staff.ID
中工作,这是与文档相关联的单个工作人员的地方吗?
最好添加一个表来分别建模文档和人员之间的关系,并删除或否决文档表中的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
。关于php - PHP/Mysql:从查找表(拆分数组)中读取数据字段值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3690113/