2012-11-12 28 views
1

我有一個用PHP編寫的搜索表單的網站。 這個網站有很多節和mySql表。MySql多重選擇和分組結果。如何正確地做到這一點?

客戶在抱怨的結果,因爲他們沒有進行分組,並希望他們分組根據現場部分,如下圖所示:

Results in "About" Page: 
<the results> 

Results in "Blog": 
<the results> 

...等等。

我必須爲它實現一個快速解決方案,所以我做了幾個查詢並分別運行它們......並使用foreach遍歷結果並打印它們。

嗯,它的工作原理,但我不高興,因爲它很慢,我不知道我會在未來的性能問題。

我不是一個mysql天才,我只是開始我的後端程序員carreer,所以我想讓別人知道我如何以更專業的方式處理這個問題。

我正在考慮使用連接,但我不知道如何使用這種方法對結果進行分組。

任何幫助將不勝感激。

+1

SQL union可能是你的朋友。非常粗略地說,選擇'About'作爲group_id,...其他字段...從table1 union選擇'Blog'作爲group_id,...其他字段...來自table2等。 –

+1

如果部分(=表格)在結構上非常相似,那麼它可能值得一試,但是如果將這些部分組合在一個結構中,則必須在PHP端以某種方式不分解它們,這也會花費一些時間。 –

+0

...進一步的分組/排序可以幫助。但是你是對的,當然這取決於。 –

回答

1

我真的懷疑加入會以任何方式幫助你。既然你說每個部分都有一個不同的表格,那麼你就沒有辦法加入他們,但仍然有意義。您可以做的最好做法是將這些查詢寫入一個句子,然後一次性獲取所有需要的信息,從而節省數據發送php <=> mysql的時間,因爲您將執行一次並返回一次。看看here看看你能做到這一點。我真的不認爲有什麼更好的東西,你可以改善:)

響應:很明顯,越多的請求,你的腳本將執行的時間越長。你有沒有試過在命令中使用命令ping google.com?你會發現,即使你發送了非常少量的數據,你也無法獲得比30ms左右更快的響應。這是您爲任何請求支付的價格。另外,它還會增加發送的數據量。所以一個接一個地執行它會導致許多不必要的調用。此外,你總是可以自己嘗試,不要以任何方式寫它。並輸出用於該任務的時間。重複幾次。如果發送數據花費的時間非常少,那麼您可以簡單地將其保存起來。但請記住,如果您的應用程序變得更大,每失去一毫秒將會加起來。乘以一千個請求,你可能會失去一分鐘的時間甚至更多。無論如何,絕對不要採用聯盟方式,因爲您很可能會失去大部分時間分析您收到的數據。

關於這個功能:我,我自己,從來沒有想過需要使用該功能,所以它不是我就是你讀它 - 我們都會從頭開始讀它。唯一的區別是,我知道這樣的功能存在:)奇怪的是,這方面的信息很少。 C#具有非常好的數據集,可以輕鬆處理數據。 PHP在我看來很懶:/我現在都在C#中,所以我傾向於在PHP中越來越少。如果我是你,我只需要從我給出的鏈接中複製粘貼示例,然後創建一個可重用的類。希望我至少幫了一點點:)

+0

TY,我不知道這個功能/方法。我會看看這些文檔。但是現在我想知道的是:它是否給我提供了更好的性能,而不是設置單獨的查詢並將它們分開執行?後一種方法使我更容易對搜索結果進行分組,因爲我可以專門「foreach」它們,並根據需要放置分段標題。我怎麼用這種方法做到這一點? - darksoulsong 1小時前 – darksoulsong

+0

是的,你確實幫了我很多。這是非常明確的。非常感謝你。 – darksoulsong

相關問題