2010-11-03 55 views
0

我构建了一个文档上传管理屏幕,在这里我的客户端可以浏览和上传pdf文档到一个mysql数据库。php mysql - 文档检索和显示

我有两个单独的表格为Agendas,一个为分钟。两者都有独立的表名“upload”和“upload_mins”。

在index.php页面上,我有页面抓取数据库的每一行,并在“下载”页面上显示所有有效的文档。

我遇到了一个问题。

每个dbase设置为递增ID。现在有两个数据库,他们即将使用相同的ID。

所以我从议程表拉:

http://www.example.com/clerk.php?ID=77

,我从分表也拉:

http://www.example.com/clerk.php?ID=77

,他们碰巧有相同的增量ID 。

有没有办法避免这种情况?我可以在分钟中添加字段参数以确保在提取文档时它们没有相同的URL吗?

创建一个整数字段或txt字段?

http://www.example.com/clerk.php?ID=77&min=yes

回答

2

如果这些只是文档,您可以将它们存储在一张表中,但有一个名为type的列,区分分钟和议程。这样,ID将是唯一的。

您还可以将types列作为外键扩展到types表,因此您可以将其扩展为在未来包含其他文档类型,例如电子表格。

这也有助于前端显示,因为您只需要一个查询即可在批处理或时间范围内获取文档,但可将其添加到不同的阵列中。例如:

// get the last 20 uploaded documents 
$sql = "SELECT * FROM documents ORDER BY created DESC LIMIT 0,20"; 
$res = mysql_query($sql); 
while ($doc = mysql_fetch_object($res)) { 
    $type = $doc->type; 
    if (!isset($docs[$type]) || !is_array($docs[$type])) { 
     $docs[$type] = array(); 
    } 
    $docs[$type][] = $doc; 
} 

// loop over agendas 
foreach ($docs['agendas'] as $agenda) { 
    echo '<a href="download.php?id=' . $agenda->id . '">' . $agenda->title . '</a>'; 
} 

// loop over minutes 
foreach ($docs['minutes'] as $minutes) { 
    echo '<a href="download.php?id=' . $minutes->id . '">' . $minutes->title . '</a>'; 
} 

... 
1

你说你遇到的问题是被复制的URL。你有两个不同的选择来解决这个问题。

第一个是创建一个标识符,告诉你你想要哪个表。你可以有agenda.phpminutes.php,或者你可以有clerk.php?ID=77&type=1clerk.php?ID=77&type=2

这会让你知道你正在引用哪张表。这也是我会推荐的方法。只要您有办法知道您需要哪张表,就没有理由避免在不同表中出现重复键。

第二种选择是将所有记录放入单个表中。然后,您可以添加一个指定其文档类型的type列。然后,您可以单独离开clerk.php文件,但需要更改上传页面以填充type列。

如果您只是将PDFs存储在数据库中,则除了id,type和文档本身之外,您不应该在此表中需要任何内容​​。