2013-03-24 48 views
0

對於新版本的網站,我在主頁上設置了「頂級用戶」部分。這使得人們可以在一堆不同的類別上爲用戶投票。所有這些信息都存儲在兩個主表的MySQL數據庫中。一個表包含信息(id * autogenerated *,用戶名,添加日期等),另一個表具有費率(id * autogenerated *,linkID,rowAvg,avg,avg2等)。來自費率表的linkID對應於信息表中的id。查詢的工作原理是通過rate_table進行查詢,按最高平均數對其進行排序,然後選擇前10個結果。然後使用該行的linkID,我從info_table中選擇該用戶的實際信息。只要每個用戶只有1個費率,這就很好,很花哨。當用戶有2個或更多費率,並且兩個費率都是正數時,會發生什麼情況?查詢選擇這兩個數據併爲兩個行中的每一行提取信息,然後顯示爲兩個不同的用戶,即使它們相同人。我怎樣才能使rate_table查詢知道何時有多個費率爲相同的linkID並將它們平均,而不是將它們顯示爲兩個不同的人。我正在考慮將每個linkID插入到一個數組中,然後對於隨後選擇的每一行,檢查linkID是否已經在數組中。如果沒有,則插入它,如果是,則將它們平均並將其存儲在數組中,然後使用該數組填充主頁上的表格。我覺得我正在推翻這一點。對不起,如果這有點令人困惑。如果您需要更多信息,請告訴我。PHP MySQL高級過濾

P.S.我還在學習我的MySQL周邊查詢的方式,所以我很抱歉,如果我要對這個完全錯誤的方式和你一起度過的最後幾分鐘試圖理解我在說什麼:P

P.P.S.我知道我不應該再使用MySQL_Query,而應該做好準備的陳述。我想要掌握MySQL查詢,因爲這是iOS使用的FMDB數據庫,然後我將轉向學習準備好的語句。

+1

這可能有助於一點,你在正確的方向[MySQL的聚合函數(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html)。 'AVG()'可能是你正在尋找的東西。 (一個結果的平均值就是這樣的結果,所以應該仍然有效) – Aiias 2013-03-24 03:46:20

+0

這看起來會有所幫助,但查詢如何知道運行AVG()函數的哪些行?是否有一個函數可以檢測列的重複值? – 2013-03-24 03:52:35

+2

在應該是唯一的列上使用['GROUP BY'](http://dev.mysql.com/doc/refman/5.0/en/select.html)子句。 – Aiias 2013-03-24 03:59:18

回答

0

看看一些MySQL Aggregate Functions的。

AVG()可能是你在找什麼。一個結果的平均值就是這個結果,所以應該仍然有效。在列上使用GROUP BY子句應該是唯一的,以便在分組行上運行聚合計算。

+0

最後一個快速問題,因爲我使用的是LIMIT 10函數,如果有兩行,它會合並這兩個,但只顯示其他9行。它不再顯示滿10。我如何強制它再選擇一行,如果其中一些被合併? – 2013-03-24 04:10:55

+0

@JoeTorraca - 這不是一個超級簡單的計算在MySQL中運行 - 看看關於該主題的這個現有問題:http://stackoverflow.com/questions/2643314/mysql-group-by-limit。 – Aiias 2013-03-24 04:16:25

+0

好的會做,謝謝你的幫助 – 2013-03-24 04:16:40