2010-10-31 53 views
1

可能重複:
selecting items that come after a specific valueSELECT在MySQL

我問這個媒體鏈接BU解釋得很糟糕,所以我要做的是正確的這個時候。

我有一個MySQL表是這樣的:

ISBN   title     author   price amount 

    978-0060850524 A Brave New World Aldous Huxley 6.49 7 
    978-0061743528 To Kill a Mockingbird Harper Lee 12.89 0 
    978-0142000670 Of Mice and Men  John Steinbeck 5.99 89 
    978-0452284234 Nineteen Eighty-Four George Orwell 10.85 90 
    978-0452284241 Animal Farm    George Orwell 9.80 24 
    978-0553574166 The Hutt Gambit  A.C. Crispin 7.99 2 
    978-0553578850 The Mandalorian Armor. K.W. Jeter 7.99 20 
    978-0571056866 Lord of the Flies William  7.70 45 
978-0765340788 The Machine Crusade  Brian Herbert 7.99 14 
978-0861404216 The Colour of Magic  Terry  29.16 3 

我想創建一個查詢至極執行以下步驟。 我有一個變量,其中包含1個產品的ISBN。 該查詢應該選擇由ISBN變量中給出的ISBN開頭的所有產品。所以如果ISBN來自第4項,結果應該顯示從第5項開始的所有10本書(是的,它應該從變量中的項目之後的1項開始,然後是6,7,8,9,10,1,2,3, 4,5

+1

你在上一個問題中得到的答案有什麼問題?他們看起來很好 – 2010-10-31 22:34:04

+0

你說選擇項目4時,結果應該從5開始,但是你從6開始列出解決方案。那是正確的嗎?如果您選擇第4項,我的答案會給您5,6,7,8,9,10,1,2,3,4。 – davur 2010-10-31 22:52:24

回答

0

你可以在MySQL這樣做在一個單一的查詢,像這樣:

SELECT * FROM `yourtable` 
order by ISBN>'Your ISBN' desc, ISBN asc 

注意:在使用順序由ISBN>'Your ISBN' desc將確保 較高的ISBN出現第一,其次是較低的。此後,每個組 按ISBN排序。

+0

非常好,像魅力一樣工作 – vincent 2010-11-01 05:58:25

0

唯一能做的我看到是兩個查詢與UNION:

SELECT * 
FROM yourtable 
WHERE ISBN = 'Your ISBN' 
UNION 
SELECT * 
FROM (
    SELECT * 
    FROM yourtable 
    WHERE ISBN <> 'Your ISBN' 
    ORDER BY ISBN 
    LIMIT 9 
    ); 

我不是ORDER BY的一個巨大的風扇和限制子查詢,但...

-1
SELECT * 
FROM (
     SELECT * 
     FROM books bo 
     WHERE isbn > 
       (
       SELECT isbn 
       FROM books bi 
       WHERE id = 4 
       ) 
     ORDER BY 
       isbn 
     LIMIT 10 
     ) q 
UNION ALL 
SELECT * 
FROM (
     SELECT * 
     FROM books bo 
     ORDER BY 
       isbn 
     LIMIT 10 
     ) q 
LIMIT 10 
+0

這是在1足夠的情況下執行4個SELECT查詢的總體矯枉過正。 – davur 2010-11-01 00:29:02

+0

@dsclementsen:我相信提問者想要10本書,不是全部(如果還有更多的話)。 – Quassnoi 2010-11-01 09:57:25

0

像這樣的東西應該表現良好:

(SELECT * FROM t1 WHERE ISBN > '978-0452284234' ORDER BY ISBN) 
UNION ALL 
(SELECT * FROM t1 WHERE ISBN <= '978-0452284234' ORDER BY ISBN)