2010-10-31 6 views
1

Possible en double:
selecting items that come after a specific valueSELECT dans une base MySQL

J'ai demandé ce allready bu a expliqué très mauvais, donc je vais le faire cette fois.

J'ai une table mysql comme ceci:

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 

Je veux créer une requête wich effectue les opérations suivantes. J'ai une variable qui contient l'ISBN de 1 des produits. la requête devrait sélectionner tous les produits classés par le bus ISBN à partir de l'ISBN qui a été donné dans la variable. donc si l'ISBN provient de l'item 4 le résultat devrait montrer tous les 10 livres commençant par l'item 5 (oui il devrait commencer à partir de 1 item après l'item dans la variable puis 6,7,8,9,10,1,2,3, 4, 5

+1

Quel est le problème avec les réponses à votre question précédente? Ils me paraissent bien –

+0

Vous dites en sélectionnant l'item 4 que le résultat devrait commencer à partir de 5, mais vous lister la solution à partir de 6. Est-ce correct? Ma réponse ci-dessous vous donnerait 5,6,7,8,9,10,1,2,3,4 si vous avez sélectionné l'élément 4. – davur

Répondre

0

Vous pouvez le faire en une seule requête dans MySql, comme ceci:

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

Note: L'utilisation ISBN>'Your ISBN' desc dans l'ordre par veillera à ce que les plus élevées apparaissent d'abord un numéro ISBN, suivi par ceux du bas. Par la suite, chaque groupe est trié par numéro ISBN.

+0

Excellent, fonctionne comme un charme – vincent

0

la seule solution que je vois serait deux requêtes avec UNION:

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

Je ne suis pas un grand fan de ORDER BY et LIMIT dans les sous-requêtes, bien que ...

-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

Il s'agit d'une surpuissance totale effectuant 4 requêtes SELECT quand 1 est suffisant. – davur

+0

@dsclementsen: Je croyais que le demandeur voulait 10 livres, pas tous (au cas où il y en aurait plus). – Quassnoi

0

Quelque chose comme ceci devrait bien fonctionner:

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