2017-08-04 85 views
0

我的訂閱網站提供了一個包含數千種資源材料的庫,它使用PDO構建在MySQL數據庫上。查詢創建用戶網站搜索,MySQL和PDO的趨勢報告

用戶可以按主要類別和子類別訪問資源。如果用戶正在尋找非常具體的東西,他們可以搜索庫。

我目前記錄所有用戶搜索到表:

table - search_terms 
primary_key (primary_key) 
search_terms (tinytext) 
time_stamp (timestamp) 

我能在我的用戶正在使用的熱門搜索的列表?

我正在尋找關於數據庫查詢的想法,超越了簡單計數單個單詞的發生,因爲我想要這些短語。樣本數據:

primary_key  search_terms        time_stamp 
1    what kind of chicken feed should I use 12:01:01 mm/dd/yy 
2    what makes a good chicken feed   13:01:23 mm/dd/yy 
3    when should I feed my chickens   09:23:15 mm/dd/yy 
4    how to build a chicken house    18:29:10 mm/dd/yy 
5    good breed for laying eggs    22:14:01 mm/dd/yy 
6    best chicken feed      01:10:00 mm/dd/yy 
7    how do I get blue eggs     18:42:48 mm/dd/yy 
8    what do I do with a broody hen   etc etc 
9    what is a broody hen      etc etc 
10    stop a hen being broody     etc etc 

如果是這樣的樣本數據,頂部的搜索將是: 「雞飼料」和「悶悶不樂母雞」。

+0

然後計算短語?如果你想要數數,請算數。我們無法看到您的代碼,數據庫,結構和數據。除了唯一合乎邏輯的事情之外,誰能告訴你該怎麼做 - 數一數。現在,你將如何做到這一點 - 那是你要解決的問題。祝你好運。 –

+0

我不明白php代碼如何與數據庫問題相關。數據庫信息已包含在內,一個表格包含三個字段。我添加了一些示例數據和期望的結果。 – Trialsman

+0

它沒有包含在內,你在編輯中添加了它,而且它沒有格式化,所以讓我們看看有多少人會閱讀它。如果你不明白爲什麼需要代碼或結構來爲編程問題提供解決方案,那麼我想我會自己去下載一些心靈感應。也許有一個很好的鏈接? –

回答

1

Google Trends的表格有2列:搜索字詞和搜索量指數。編寫一個索引超出了我可以在沒有更多信息的情況下向您展示的範圍,但是我懷疑一個「數」表就足以滿足您的需求。

上面包含的表格提供了一些說明,但它不允許我證明「統計」搜索項的價值。因此,我提供我自己的示例數據庫:

primary_key  search_terms   time_stamp 
1   1    beer 2017-07-01 13:07:31 
2   2   white wine 2017-07-04 13:39:28 
3   3   whiskey 2017-07-05 01:06:23 
4   4 whiskey for gifts 2017-07-05 04:17:22 
5   5 craft beer denver 2017-07-05 14:48:03 
6   6    beer 2017-07-10 07:33:13 
7   7   white wine 2017-07-14 02:13:00 
8   8 pinot grigio wine 2017-08-22 03:16:18 
9   9 whiskey from japan 2017-08-23 07:30:59 
10   10 white wine rare 2017-08-01 15:03:25 
11   11   white wine 2017-08-02 14:15:24 
12   12 craft beer dallas 2017-08-02 22:03:44 
13   13 new york whiskey 2017-08-03 05:45:09 
14   14   white wine 2017-08-03 16:06:18 
15   15 beer ipa michigan 2017-08-04 20:15:50 

注意,搜索詞「啤酒」和「白葡萄酒」中列出不止一次。我們可以調用一個簡單的搜索查詢:

返回所有不同(或唯一)的搜索項。

計算每個搜索項的出現次數。

SELECT 
    DISTINCT search_terms AS 'Unique Search Terms', 
    COUNT(search_terms) AS 'Occurrence' 
FROM search_terms 
GROUP BY search_terms 
ORDER BY Occurrence DESC 

輸出的結果是:

Unique Search Terms Occurence 
1   white wine   4 
2     beer   2 
3    whiskey   1 
4 whiskey for gifts   1 
5 craft beer denver   1 
6 pinot grigio wine   1 
7 whiskey from japan   1 
8  white wine rare   1 
9 craft beer dallas   1 
10 new york whiskey   1 
11 beer ipa michigan   1 

看來搜索詞「白葡萄酒」是不是更流行的「啤酒」和「啤酒」比其他搜索字詞更受歡迎。這當然是一個簡化的例子,但是相同的查詢應該在更大的表上工作。

編輯:我看到你已經修改了你的要求,並希望過濾掉停用詞。正如其他人所建議的那樣,這要複雜得多。但是,您可以在排列結果時定義要刪除的停用詞表。然後可以修改上面提供的查詢以去除這些詞並只顯示相關的關鍵詞。

作爲最終的建議,您可能不希望列與表格共享同一個名稱(本例中爲「search_terms」)。這可能會導致混亂和問題。

+0

謝謝,我相信這足以滿足我的需求。儘管現在我有興趣創建搜索量索引。有沒有辦法增加查詢的複雜性,以便將「白酒」和「白酒」作爲相同的搜索詞?僅供參考 - 上述數據庫結構與數據一起構成。對錶和字段使用相同的名稱只是快速鍵入。 – Trialsman

+0

如前所述,根據文檔,停用詞過濾包含在MyISAM引擎上MySQL 5.7自然語言全文搜索中。所以我相信我已經涵蓋了這一部分。 – Trialsman

+0

@Trialsman'白葡萄酒'='白葡萄酒'可以實現,但如果您將尺寸增加到2個字以上,則需要創建更復雜的功能 - 尤其複雜。例如。 「有機美國雞飼料」=「美國有機雞飼料」=「有機雞飼料美國人」= ..... 22其他組合 – RVD