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 :

Requête pour faire plusieurs numerotations


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut Requête pour faire plusieurs numerotations
    Bonjour

    Pour une bibliothèque je cherche a presenter le classement des livres lors de leurs retours.

    On doit "visualiser" en fonction d'une date de sortie,
    quel livre est rentré le plus vite(classement global),
    et en fonction des type de livre(classement par type),
    lesquels sont rentrés le plus vite.

    Le classement global brutal, c'est bon, je sais faire.

    Je cherche une requette pouvant presenter la numerotation brutale, et celle des types de livres.

    4 tables
    livres : id_livre, titre, id_typ
    typ_livres : id_typ, libelle
    sorties : id_livre, dt,hr
    retours : id_livre, dt,hr

    le type du livre c'est par exemple : policier, horreur, sciences fiction,...

    Requette pour visualiser la numerotation des retours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set @pos_brut=0;
    SELECT @pos_brut:=@pos_brut+1
    ,l.id_livre
    ,l.titre
    ,t.libelle
    FROM livres l, sorties s, retours r, typ_livres t
    WHERE s.dt='2013-10-01'
     and s.id_livre=l.id_livre
     and r.id_livre=l.id_livre
     and l.id_typ=t.id_typ
    order by r.dt,r.hr
    Cela donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1 * 123456 * titre1 * Typ1
    2 * 852145 * titre2 * Typ1
    3 * 852157 * titre3 * Typ2
    4 * 145236 * titre4 * Typ3
    5 * 785120 * titre5 * Typ3
    ...
    J'aimerais en fait obtenir une reponse indiquant apres la colonne "typ du livre", le classement de ce type.
    La reponse de la requette serait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1 * 123456 * titre1 * Typ1 * 1 er
    2 * 852145 * titre2 * Typ1 * 2 em
    3 * 852157 * titre3 * Typ2 * 1 er
    4 * 145236 * titre4 * Typ3 * 1 er
    5 * 785120 * titre5 * Typ3 * 2 em
    ...
    Tout ceci via une seule requette Est ce possible ?
    Quelle requette me proposer vous ?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    appliquez votre méthode d'incrémentation de variable global à la requette et faites uen rupture lorsque le type de livre change.

    Par contre il va falloir commencer l'order by par le type de livre

  3. #3
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut
    Merci punkoff

    appliquez votre méthode d'incrémentation de variable global à la requette et faites uen rupture lorsque le type de livre change.
    Comment prendre en compte la rupture du type du livre (un petit exemple) svp ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    avec un case when et une autre variable globale qui retient le type de la ligne précédente

  5. #5
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut
    je n'arrive pas a memoriser l'ancienne valeur du type.
    Il est vrai que je ne connais pas les "case when", et le peu
    que j'ai compris ne semble pas etre suffisant.
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT @p_b := @p_b+1 as p_b, id_livre, titre,type, @typ_act:=CONVERT(ctg USING utf8),@typ_act=0;
    CASE WHEN @typ_act=@typ_prec THEN @p_b:=@p_b+1 else @p_b:=1 END as p_b
    ,CASE WHEN @typ_act=@typ_prec THEN 1 else @typ_prc:=CONVERT(ctg USING utf8) END as type_prec
     
    from ...
    ORDER BY type
    typ_act == valeur du type actuel
    typ_prec = valeur du type precedant

    C'est qoui qui n'est pas bon dans mon code ?
    Je ne sais pas comment memoriser la valeur du type quand il change, tout en mettant à 1 l'ordre du nouveau type

    Merci d'avance

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/02/2007, 09h04
  2. Requête pour faire une addition sur autres requêtes
    Par guenfood dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/06/2006, 18h35
  3. pb pour faire plusieurs requettes MYSQL
    Par flow++ dans le forum C
    Réponses: 2
    Dernier message: 04/05/2006, 18h00
  4. Une requête pour éditer plusieurs lignes.
    Par Anduriel dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/05/2006, 20h24
  5. Script pour faire plusieurs page…
    Par sam01 dans le forum Langage
    Réponses: 7
    Dernier message: 14/04/2006, 21h51

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