我有兩個表格......第一個是帶有(page_id,page_title)行的頁面列表。第二個是這些頁面上的商品列表,每個商品都有一個價格(item_id,page_id,item_title,item_price)。MYSQL select 3「results id」的結果
我想從每個頁面抓取前三個項目(首先按最高item_price排序),頁面中累積價格最高的頁面排在第一位。這遠遠超出了我的MYSQL能力,我正在尋求如何使這個最有效率的建議! :) 謝謝!
我有兩個表格......第一個是帶有(page_id,page_title)行的頁面列表。第二個是這些頁面上的商品列表,每個商品都有一個價格(item_id,page_id,item_title,item_price)。MYSQL select 3「results id」的結果
我想從每個頁面抓取前三個項目(首先按最高item_price排序),頁面中累積價格最高的頁面排在第一位。這遠遠超出了我的MYSQL能力,我正在尋求如何使這個最有效率的建議! :) 謝謝!
你可以通過幾種不同的方式來做到這一點。我會做的是運行一個查詢,說:「讓我的所有頁面按照它們的項目總數排序」,然後在php中循環遍歷它們,併爲每個頁面執行一個「讓我獲得當前頁面的前3項」 。
有意義嗎?
查詢一個(未經測試,我的手機上寫的):
SELECT p.page_name, (SELECT SUM(item_price) FROM items WHERE page_id = p.page_id) AS cumulative_price FROM pages p ORDER BY cumulative_price DESC;
查詢兩(還未經測試)通過一個查詢結果的循環:
SELECT * FROM items WHERE page_id = '$currentPageId' ORDER BY item_price DESC LIMIT 3;
顯然你會在第一個查詢中包含頁面id以供第二個查詢使用。 – 2012-03-25 03:10:35
我只是要打電話給第二個表「表2」和ITEM_ID我找了「SOME_ITEM_ID」
SELECT * FROM `table2` WHERE `item_id` = 'SOME_ITEM_ID' ORDER BY `item_price` DESC;
在英語中是什麼這說的是:
從表2中選擇的一切,其中ITEM_ID是這個,以降序
由ITEM_PRICE對列表進行排序此SQL語句將返回每一個命中,但您只需輸出代碼中的前三個。
我這裏不好 - 我編輯了原帖。項目表通過「page_id」鏈接到頁表。項目同時具有「item_id」和「page_id」。 – PotatoFro 2012-03-26 17:52:25
我的直覺告訴我,有可能是沒有更快辦法做到這一點,而不是做一個for循環中的應用在所有的頁面,在做一個小select item_price from item where page_id = ? order by item_price desc limit 3
每個paqe,並可能堅持的結果像memcached之類的東西,所以你不會對數據庫徵稅太多。
但我喜歡挑戰,所以我會嘗試它。
SELECT p1.*, i1.*,
(SELECT count(*)
FROM items i2
WHERE i1.item_price < i2.item_price
AND p1.page_id = i2.page_id) price_rank,
FROM pages p1
LEFT OUTER JOIN items i1
ON p1.page_id = i1.page_id
WHERE price_rank < 3;
那奇子選擇是要大概做一個可怕的很多工作在items
每一行。許多其他RDBMses有一個稱爲窗口函數的功能,可以更加優雅地進行上述操作。舉例來說,如果你使用PostgreSQL,你可以寫:
SELECT p1.*, i1.*,
RANK(i1.item_price)
OVER (PARTITION BY p1.page_id
ORDER BY i1.item_price DESC) price_rank
FROM pages p1
LEFT OUTER JOIN items i1
ON p1.page_id = i1.page_id
WHERE price_rank <= 3;
,並且計劃會安排在一個令發生導致排名正確訪問行。
您想一次獲得所有頁面的前3項,還是一次獲得一頁? – 2012-03-25 02:52:49
我想輸出所有頁面的列表,顯示每個頁面的前三項(頂部是最高價格,頁面按累計最高價格排序)。謝謝! – PotatoFro 2012-03-25 02:54:36
給定一個項目,你怎麼知道它屬於哪個頁面? – 2012-03-25 05:04:08