我构建了一个文档上传管理界面,我的客户端可以浏览并将pdf文档上传到mysql dbase。
我有两个单独的表用于议程,一个表用于分钟。两者都有单独的表名“upload”和“upload_mins”。
在index.php页面上的,我有页面获取数据库的每一行,并在“下载”页面上显示所有有效文档。
我遇到了一个问题。
每个dbase都设置为递增ID。现在有两个数据库,他们将使用相同的ID。
所以我从议程表中拉出来:
http://www.example.com/clerk.php?ID=77
我也从Minutes表中拉出来:
http://www.example.com/clerk.php?ID=77
它们恰好具有相同的增量ID。
有没有办法避免这种情况?我可以在分钟中添加字段参数,以确保在提取文档时它们没有相同的URL吗?
创建整数字段或txt字段?
答案 0 :(得分: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 :(得分:1)
您说您遇到的问题是网址重复。您有2种不同的选择来解决这个问题。
第一种是创建一个标识符,告诉您需要哪个表。您可以拥有agenda.php
和minutes.php
,也可以拥有clerk.php?ID=77&type=1
和clerk.php?ID=77&type=2
。
这将允许您知道要引用的表。这也是我建议的方法。只要您有办法知道您需要哪个表,就没有理由避免不同表中的重复键。
第二个选项是将所有记录放入一个表中。然后,您可以添加type
列,指定它是什么类型的文档。然后,您可以单独保留clerk.php文件,但需要更改上传页面以填充type
列。
如果您只是将PDF存储在数据库中,除了id
,type
和文档本身之外,您不应该在此表中添加任何内容。