我有一个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/

10-12 17:26
查看更多