2010-11-03 75 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和文檔本身之外,您不應該在此表中需要任何內容​​。