IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Afficher 2 enregistrements précédents et suivants


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 62
    Points
    62
    Par défaut Afficher 2 enregistrements précédents et suivants
    Bonjour,

    Je cherche un moyen pour afficher par ex :

    Table_exemple
    ID
    ----
    1
    2
    3
    4
    5
    6
    7
    8

    Le where serait : id = 5
    et je souhaite afficher :
    34567

    Avez vous une idée ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE Table_exemple (ID INT)
     
    INSERT INTO Table_exemple VALUES (1), (2), (3), (4), (5), (6), (7), (8);
    La solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH
    T0 AS
    (SELECT ID, ROW_NUMBER() OVER(ORDER BY ID) AS N
     FROM   Table_exemple)
    SELECT ID
    FROM   T0  
    WHERE  N BETWEEN (SELECT N FROM T0 WHERE ID = 5) - 2
                 AND (SELECT N FROM T0 WHERE ID = 5) + 2
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @p INT = 6;
     
    WITH T(ID) 
    AS
    (
     SELECT * FROM
     (
      VALUES (1),(2),(3),(4),(5),(6),(7),(8)
     ) AS X(T)
    )
    SELECT *
    FROM T
    WHERE ID BETWEEN @p -2 AND @p + 2
    ++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    arf me suis planté de topic, c en mysql qu'il me faut ça pas en sql serv sorry

    En fait c'est un peu plus compliqué :

    je n'aurais pas du mettre d'id un autre exemple plus parlant :

    Where = "xxx"

    ADRESSES
    ----------
    zzz
    eee
    rrr
    xxx
    yyy
    fff
    aaa
    rrr

    Pareil je voudrais trouver dans l'ordre :
    eee
    rrr
    xxx
    yyy
    fff

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Dans ce cas là la solution proposée par SQLPro semble la plus adaptée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    WITH T(ID) 
    AS
    (
     SELECT * FROM
     (
      VALUES ('zzz'),('eee'),('rrr'),('xxx'),('yyy'),('fff'),('aaa'),('rrr')
     ) AS X(T)
    ),
    T_NUM
    AS
    (
    	SELECT 
    	 ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS n,
    	 ID
    	FROM T
    )
    SELECT ID
    FROM T_NUM 
    WHERE n BETWEEN (SELECT n - 2 FROM T_NUM WHERE ID = 'xxx')
                AND (SELECT n + 2 FROM T_NUM WHERE ID = 'xxx')
    ++

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    merci et en traduction mysql tu saurais ce que ça donne

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Les fonctions de fenêtrage (ROW_NUMBER OVER) n'existent pas en MySQL.
    Il définir de quelle manière on classe les données pour pouvoir extraire les deux précédentes et les deux suivantes. Notamment dans ton exemple, qu'est-ce qui justifie que fff arrive après xxx et yyy ?

    Et plutôt que de parler de choses abstraites, dis-nous plus concrètement de quoi il s'agit avec la description de la table réelle et un jeu de données éventuellement fictif si les données sont trop confidentielles.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Enregistrements précédents et suivants
    Par cedrick21 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/06/2012, 14h44
  2. Afficher 2 enregistrements précédents et suivants
    Par Ikaly dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/09/2010, 18h06
  3. [MySQL] Enregistrement précédent/suivant
    Par jp76ers dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/02/2007, 11h21
  4. Réponses: 4
    Dernier message: 10/08/2006, 17h58
  5. Affichage suivant enregistrement précédent
    Par cdumas dans le forum Access
    Réponses: 8
    Dernier message: 30/04/2006, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo