PHP/Mysql:从查找表读取数据字段值(拆分数组)

PHP/Mysql:从查找表读取数据字段值(拆分数组),php,mysql,database,Php,Mysql,Database,我有一个Mysql数据库和两个表: 文件 ... -斯塔夫 职员 -身份证 -名字 DOCUMENTS表将每个文档分配给STAFF表中的单个或多个用户,因此DOCUMENTS表中的staffID由逗号分隔的STAFF ID数组组成,例如(2,14) 我成功地将数组拆分为各个值: 二, 十四, 但是,我不希望有身份证号码,而是希望有员工表中的实际姓名——我如何才能做到这一点。任何帮助都将不胜感激-请参阅下面我当前的代码 $result = mysql_query("SELECT org

我有一个Mysql数据库和两个表:

文件 ... -斯塔夫

职员 -身份证 -名字

DOCUMENTS表将每个文档分配给STAFF表中的单个或多个用户,因此DOCUMENTS表中的staffID由逗号分隔的STAFF ID数组组成,例如(2,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>';

}
$result=mysql\u查询(“选择
orgName,
documents.docName,
documents.docEntry,
文件,斯塔夫,
职员姓名,
职员ID
从…起
文件
上的内部加入组织(documents.IDorg=organizations.IDorg)
上的内部联接人员(documents.staffID=staff.ID)
")
或者死(mysql_error());
while($row=mysql\u fetch\u数组($result)){
$splitA=$row['staffID'];
$resultName=explode(“,”,$splitA);
$i=0;

对于($i=0;$i而言,您的现有代码似乎可以在
documents.staffID=staff.ID
的位置工作-即只有一个staffID与文档关联

您最好添加一个表,分别对文档和人员之间的关系进行建模,并删除或弃用文档表中的staffID字段

CREATE TABLE document_staff (
    document_id <type>,
    staff_id    <type>
)
MySQL集合类型有一些限制,例如最大成员大小为64,但可能足以满足您的需要


如果是我,我会改变模型而不是使用
FIND\u IN\u SET

非常感谢您的回答-非常感谢! 我的表格设置为:

文件:

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表中,这样我就可以为一个文档分配多个STAFF成员。这样我就可以访问DOCUMENTS表中的staffID数组并将其拆分,我想知道是否有办法将staffID与STAFF关联。命名并打印出查询结果中的STAFF名称,而不是ID。再次感谢!

我更新了答案to显示我想到的完整查询。如果你不需要员工ID,你可以忽略它。从员工表中选择记录对组织有什么意义吗?顺便说一句,最好将额外信息编辑到原始问题中,而不是发布更新作为答案!
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;