2012-12-23 106 views
1

我有一個顯示我的數據庫中的數據的頁面。在用戶看到數據之前,他們有幾個選擇框,以便他們可以選擇以多種不同方式過濾數據,例如選擇在特定時間段內顯示數據。而且我使用get方法的url看起來與下面類似。顯示最熱門QUERY_STRING

http://www.example/com?report=2&days=7&etc=2 

這一切工作正常,用戶可以過濾數據,以獲得他們想要的不同結果。我一直在查看我的分析帳戶,可以看到有些查詢比其他查詢更受歡迎。我怎樣才能讓用戶知道哪些查詢最受歡迎(例如,過去24小時內查詢得最多)。目前,我已經根據Google Analytics數據製作了一個手動的html表格,並在早上更新。

<table> 
<tbody> 
<tr><th>query</th><th>link</th></tr> 
<tr><td>Show data from last 7 days</td><td><a href="http://www.example/com?report=2&days=7&etc=2">View</a></td></tr> 
</tbody> 
</table> 

我想過加入其中有ID,查詢,時間戳的表稱爲計數,並說

$a='report='; 
$b=$_SERVER['QUERY_STRING']; 
if($b == $a . $report['id']) 
{} 
else 
{//Insert id, query, timestamp into the database} 

這樣我可以在查詢某一時間段做一個計數有額外的排序參數。這是實現這個目標的最佳方式嗎?

回答

2

創建一個存儲查詢部分的表和時間戳的表。它不需要其他字段,因爲您將獲得最新通話的運行總和。

然後得到類似

select url, 
     count(*) as reqs 
    from queries 
where ts > now() - interval 24 hour 
group by url 
order by reqs desc 

得到最請求的URL在過去的24小時。

2

我會去多一點,並考慮到以下內容:

http://www.example/com?report=2&days=7&etc=2 

是基本相同:

http://www.example/com?report=2&etc=2&days=7 

至於什麼表示,但你提到的算法將它們記錄爲2個不同的報告,因爲$_SERVER['QUERY_STRING'];是不同的。

此外,從您的應用程序的業務邏輯的角度來看,多餘的參數可以不使用,但是存在:

http://www.example/com?report=2&etc=2&days=7&utm_source=feed 

所以,我會做對構成查詢鍵PARAMS一點處理:

  1. 排序PARAM名只有
  2. 考慮到PARAMS,實際上無論
+0

由於OP控制了生成查詢的gui,可能是浪費時間。 –

+0

你認爲在1個月內他會記住保持URL相同,當他必須添加一些新的功能,該頁面?或者是在這些網頁上添加/更新功能的同事? –

+0

我認爲這不重要,因爲運行總和只會超過24小時。 –

2

我想你應該創建一個帶有時間戳,報告,天等的表格,並將它們用作關鍵字。

這是安全得多,如果:

  • 隨時參數,可以通過郵寄(形式)發送他們不會在URL中。

  • 其中一些可能來自COOKIES或其他來源,他們將不會在URL中。

  • 您決定其他選項添加到可以從頁面切換到頁面,但不會修改顯示的各類報表,如造型方案的URL,例如& viewkind = 2 & colorset = 3或添加隨機無效像& rnd = 83732之類的高速緩存,或者你將來可能決定的任何東西。

  • 別的加入到像哈希#NAME可能會干擾的URL(跳轉到命名錨在頁面底部的一半將被視爲不同的報告)

  • 也,鍛造一個完整的URL來攻擊你的數據庫可能比僞造單個整數或字符串名稱參數要容易得多

  • 也可能以不同的方式調用您的網站,使url不同。使用www前或不使用https,如果安全的話。一些參數可能具有默認值,因此,例如,不指定日期可能與days = 1相同,因此報告可能相同,但URL不同。