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 :

[MySQL] Order by & Limit questions.


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut [MySQL] Order by & Limit questions.
    Bonjour à tous !!

    J'ai une question à vous poser !

    J'ai une table comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE TABLE T_STATUS_CHANGE (
           CXR_ID                         INTEGER NOT NULL,
           CXRSTAT_CHANGE_DATE TIMESTAMP NOT NULL,
           CXRSTAT_STATUS          TINYINT NULL
    ) TYPE=INNODB;
     
    ALTER TABLE T_STATUS_CHANGE ADD UNIQUE STATUS_CHANGE_IDX (CXR_ID, CXRSTAT_CHANGE_DATE);
     
    CREATE INDEX IND_STATUS_CHANGE ON T_STATUS_CHANGE
    (
           CXR_ID                          ,
           CXRSTAT_CHANGE_DATE
    );
    Déjà, sommes nous d'accord sur le fait que l'ajout d'une contrainte unique + création d'un index est inutile ? Un seul suffirait ou y'a-t-il une astuce qui m'échappe??

    Bref, à part ce détail je tente d'écrire une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select s.* 
    from T_STATUS_CHANGE s 
    where s.cxrstat_change_date <= '2009-11-04 07:45:23.0' 
      and ( 
        s.cxr_id = 5664 
        or s.cxr_id = 5649 
        or s.cxr_id = 5668 
        or s.cxr_id = 5645 
        or s.cxr_id = 1033 
        or s.cxr_id = 1034 
        or s.cxr_id = 1049
      )
    order by s.cxrstat_change_date desc, s.cxr_id
    Le select * n'est là que pour l'exemple (je sais que c'est mal ^^ et qu'il faut spécifier tous les champs).

    Bref cette requête me retourne bien ce que je veux MAIS je ne voudrais qu'elle me retourne qu'une seule ligne PAR s.cxr_id différent !!

    En gros pour le moment elle peut me retourne un truc du style :

    CXR_ID - CXRSTAT_CHANGE_DATE - CXRSTAT_STATUS
    1 Date1 0
    1 Date2 1
    2 Date3 0
    3 Date4 1

    (les identifiants ne correspondent pas... c'est juste pour l'exemple )
    Mais comme vous pouvez le voir, j'ai 2 lignes ou la valeur '1' pour la colonne CXR_ID apparait. J'aimerais n'avoir qu'une seule ligne par CXR_ID, auriez vous une piste à me donner, je sèche :'(

    D'avance merci !!

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Quelle ligne doit être retournée pour chaque id ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  3. #3
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Salut !

    Je vais exprimer de façon différente mon besoin.

    Le but étant de retrouver, pour un lot de CXR_ID donné, la ligne la plus vieille (par rapport à la colonne TIMESTAMP).

    Par exemple si en entrée j'ai comme cxr_id (10,55,300) j'aimerais retrouver en sortie 3 lignes :
    - une pour l'identifiant CXR_ID = 10
    - une pour l'identifiant CXR_ID = 55
    - une pour l'identifiant CXR_ID = 300

    Et ces 3 lignes doivent être les plus "vieilles" pour ces identifiants.

    La requête que j'ai écrite me renvoie tout en fait, et après je fais un traitement pour garder une seule ligne par cxr_id, c'est d'ailleurs pour ça que je fais un double order by...

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Ne serait-ce pas le même problème que dans ce post ?
    http://www.developpez.net/forums/d84...2-max-cascade/
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    HAN !

    C'est trop ça DD

    Merci beaucoup !!

    Cela dit, pour pas me faire eng.., je tiens à préciser que j'avais fait une recherche avant de poster (mais bon c'est pas évident de "bien" chercher").
    Et, j'ai encore pas mal de trucs à apprendre en SQL...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec ORDER BY et LIMIT
    Par lex_22 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/07/2008, 20h03
  2. Réponses: 3
    Dernier message: 08/03/2007, 10h53
  3. erreur MySql : 1064; pb de LIMIT?
    Par punky_brooster dans le forum Outils
    Réponses: 2
    Dernier message: 07/03/2007, 19h48
  4. optimisation mysql : quel sont les limites ?
    Par xorax dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2007, 15h31
  5. MySQL sur un serveur limité en RAM
    Par bfabien dans le forum Installation
    Réponses: 11
    Dernier message: 07/02/2006, 21h19

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