php mysql - 文档检索和显示

时间:2010-11-03 14:42:43

标签: php mysql

我构建了一个文档上传管理界面,我的客户端可以浏览并将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字段?

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

2 个答案:

答案 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.phpminutes.php,也可以拥有clerk.php?ID=77&type=1clerk.php?ID=77&type=2

这将允许您知道要引用的表。这也是我建议的方法。只要您有办法知道您需要哪个表,就没有理由避免不同表中的重复键。

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

如果您只是将PDF存储在数据库中,除了idtype和文档本身之外,您不应该在此表中添加任何内容。