私の腸がで結果を各paqeためselect item_price from item where page_id = ? order by item_price desc limit 3
少しやって、そしておそらく付着し、すべてのページを介してアプリケーションにforループを行うことよりも、これを行うには速く方法は、おそらく存在しないことを私に伝えますmemcachedのようなものなので、あなたのデータベースにはあまり課税していません。
しかし、私は挑戦が好きなので、私はそれをどうにかしようとします。奇数サブ選択は、おそらくitems
内のすべての単一の行のために仕事の非常に多くをするつもりであることを
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;
。他の多くの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項目、または一度に1ページを取得しますか? –
すべてのページのリストを出力して、各ページの上位3つの項目を表示したい(最高の価格はトップ、累計の最高価格で注文されたページ)。ありがとう! – PotatoFro
アイテムがあれば、どのページに属しているかをどのように知っていますか? –