2014-07-14 89 views
-3

我想從表中選擇產品。 這些數據將根據product_rank 排序但是,即使排名不夠好,每個3或5個產品我也想從同一張表中選擇另一種產品,即使排名不夠好! Let's說表只有4個字段:使用計數器從mysql中選擇混合結果

ID   Title   Rank   CPC 

已經有人一個想法如何才達到與一種臺在那裏我定義每一個應該有多少產品展示多少個產品highbidder的?

感謝您的幫助

編輯: 這裏有一些樣本數據

1  shoes A  500 0.4 
2  shoes B  0  0.9 
3  shoes C  480 0.5 
4  shoes D  600 0.3 
5  shoes E  550 0.4 
6  shoes F  300 0.5 
7  shoes G  80  0.8 
8  shoes H  800 0.35 
9  shoes I  100 0.8 
10  shoes J  900 0.4 

Let's說,我想在每三個位置的最高出價者展示。例外的結果是以下

shoes J (best rank) 
shoes H (2nd best rank) 
shoes B (1st highbidder) 
shoes D (3rd best rank) 
shoes E (4th best rank) 
shoes I (2nd highbidder and better rank than G!!) 

等等

它應該只有一個select語句如果可能的話。 謝謝

+0

請添加示例數據,預期輸出和您堅持與 –

回答

0
SELECT * FROM tbl LIMIT 5;  # Retrieve first 5 rows 
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 

可以用來告訴它,你選擇其中5之前,並希望在未來10,或什麼的。

0

要做具體的訂購是不容易的...這需要一些擺弄,但會做你想要的東西..它由2排名然後1排序最大的排名和中央電視臺。

SELECT * FROM(
    (SELECT 
     id, title, rank AS my_rank, count_col 
    FROM 
     (SELECT 
      id, title, rank, @C:[email protected] + 1 AS testing, 
      IF(@C MOD 3 = 0, @C:[email protected] + 1, @C) AS count_col 
     FROM 
      products 
     CROSS JOIN (SELECT @C:=0) t 
     ORDER BY rank DESC) AS temprank) 
    UNION 
    (SELECT 
     id, title, cpc AS my_rank, count_col 
    FROM 
     (SELECT 
      id, title, cpc, @B:[email protected] + 3 AS count_col 
     FROM 
      products 
     CROSS JOIN (SELECT @B:=0) t 
     ORDER BY cpc DESC) tempcpc) 
    ORDER BY count_col 
    ) as total_rows 
group by id 
order by count_col 

DEMO

示例輸出。 http://screencast.com/t/uMSPU9IiEyg6

+0

堅持的查詢感謝,但它沒有爲我工作。我不只是擺弄;-) 如果你看看易趣網站,並進行搜索例如。 '牛仔褲',你會看到每一秒或第三個產品都是拍賣。它們基本上與他們想要顯示的拍賣相同,我想在這些位置顯示高出價者。只是混合結果! – matrixx

+0

@ ahajji06不知道這是如何不工作..讓我發佈一個SQL小提琴的輸出。它按此順序排列。你想顯示所有的結果嗎?又名顯示鞋子A兩次一次爲中央社和一次排名?或只顯示一次? –

+0

@ ahajji06我剛剛在DEMO中添加了sql提琴到我的答案......我從來沒有說過你在擺弄我說過'花了一點時間擺弄',這意味着它需要一些工作和調整才能使其工作。 –