我有一個Web應用程序,我使用2個表,一個用於存儲產品信息,另一個用於存儲每個產品的投票。MySQL查詢基於投票加入2個表
現在我想根據產品得票數來顯示產品。下面是表結構
產品:
PRODUCT_ID TITLE
1 product1
2 product2
3 product3
4 product4
投票:
PRODUCT_ID USER_ID
1 1
1 1
2 2
3 2
而且我期待的結果,在下降的選票,以顯示產品
PRODUCT_ID TITLE VOTES
1 product1 2
2 product2 1
3 product3 1
目前我正在使用這樣的查詢
SELECT p.product_id, p.title, count(*) AS total FROM products p
INNER JOIN votes v ON v.product_id = p.product_id GROUP BY p.product_id
ORDER BY count(*) DESC LIMIT 110
產品表有大約30,000條記錄,並且投票表有大約90,000條記錄。
現在問題是需要很多時間(隨機在18到30秒之間)。由於表格中的記錄數量並不高,我不知道爲什麼需要這麼多時間。
有一點需要注意的是,當我第二次運行查詢時,它以幾毫秒的時間獲取結果,我認爲這是一個非常複雜的查詢的理想時間。
我再次對編程的數據庫方面很陌生。
我不確定查詢中是否有任何錯誤,或者它是不是有效的表結構(至少要快速獲取記錄)。
查詢看起來不太好,你需要選擇從投票而不是產品,因爲你正在做計數,其次你需要使用EXPLAIN select ...(你的查詢看看有什麼說) –
謝謝對於這個建議,我會改變查詢來選擇票數 – Questions
道歉你不需要改變它,但你可以從產品中選擇!!它應該工作,我誤解了這個問題。 –