Numéroter les lignes en fonction de la date

Kanmegne -  
 adda -
Bonjour,
Je voudrai écrire une requete Mysql qui numerote les lignes en fonction de la date du jour (chaque nouveau jour, la numerotation recommence à 1). Comme ceci :

j'ai ceci:
---------------------------------------------------------
| ID | Datedujour |NomduPatient|Age| Sexe|
---------------------------------------------------------
| 1 | 2012-01-11 | D | 22 | M |
| 2 | 2012-01-11 | Z | 08 | M |
| 3 | 2012-01-15 | C | 12 | F |
| 4 | 2012-01-17 | A | 20 | M |
| 5 | 2012-01-17 | S | 52 | F |
| 6 | 2012-01-17 | F | 63 | F |

je voudrai avoir ceci:

----------------------------------------------------------------
| ID | Datedujour | IDJ |NomduPatient|Age| Sexe|
----------------------------------------------------------------
| 1 | 2012-01-11 | 1 | D | 22 | M |
| 2 | 2012-01-11 | 2 | Z | 08 | M |
| 3 | 2012-01-15 | 1 | C | 12 | F |
| 4 | 2012-01-17 | 1 | A | 20 | M |
| 5 | 2012-01-17 | 2 | S | 52 | F |
| 6 | 2012-01-17 | 3 | F | 63 | F |

Merci infiniment pour votre aide.

6 réponses

  1. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    Salut,

    A quoi correspond exactement votre numérotation?
    Je vois bien votre champ "IDJ" mais je ne comprend pas le rapport avec les dates.
    0
  2. kanmegne
     
    Bonjour et merci encore pour votre réponse,
    je m'excuse si ma demande n'était pas claire;
    je voudrai que le champ IDJ on trouve un nombre de 1 à n pour la même valeur dans le champ DATEDUJOUR
    c'est à dire que le champ IDJ s'auto-incremente de 1 tant que le champ DATEDUJOUR a la même valeur. Dès que le champ DATEDUJOUR change de valeur, le champ IDJ se reinitialise en prenant la valeur 1.

    Merci encore de votre réponse ,
    je reste à votre écoute.
    0
  3. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    Ok, je vois en gros ce que vous voulez faire mais comme je n'ai pas le contexte exacte, ma réponse va être aléatoire...

    En gros, avant l'enregistrement en BD il faut comparer la date du jour avec les dates enregistrées en BD. Si une ou plusieurs dates identiques existent, il faut sélectionner la dernière pour récupérer la valeur du champ "IDJ" pour enfin ajouter "1" sur l'enregistrement en cours.

    En gros et si je ne me plante pas :
    $variabledate = '2012-01-17';
    $cherche = mysql_query("SELECT MAX(IDJ) FROM TABLE WHERE Datedujour = '".mysql_real_escape_string($variabledate)."'");
    $data = mysql_fetch_array($cherche);
    //Si rien
     if(mysql_num_rows($cherche) == 0)
    {
    //On enregistre en bd et le champ IDJ vaut 1
    }
    //si quelque chose
    else{
    //On enregistre en BD et le champ IDJ vaut $date+1
    }
    0
  4. kanmegne
     
    Bonjour,
    je reformule plus clairement ma question, dans l'espoir d'être mieux compris et mieux aidé

    ReBonjour ,

    j'ai conçu un registre de rendez-vous pour noter les rendez-vous de
    mes patients. il comprend les champs;
    id index , auto-increment
    date du jour date
    sexe M ou F
    age 0 à 150

    je voudrais à l'aide d'une requête Mysql, écrire une requête qui me

    donne l'ordre de passage de mes patients pour chaque journée de

    consultation.

    C'est à dire pour chaque journée de consultation, le premier patient

    qui a pris rendez-vous portera le numero 1, le deuxième portera le

    numero 2 ainsi de suite.

    Avec la requête Mysql, je compte obtenir les champs suivants:

    id index , auto-increment
    date du jour date
    ordre de passage 1 à n
    sexe M ou F
    age 0 à 150

    Pouvez vous m'accorder votre aide pour écrire cette requête?
    Merci par avance.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
     SELECT * FROM VOTRETABLE WHERE Datedujour=$variabledate ORDER BY IDJ ASC

    $variabledate doit correspondre à la date du jour tel qu'enregistré en BD.

    Si vous aviez demandé comment faire un trie sur votre table en fonction de la date du jour avec un classement croissant sur le champ IDJ, j'aurais tout de suite comprit.

    Une question stupide engendre une réponse stupide!
    Une question mal formulé engendre une réponse aléatoire!
    0
  7. ovillemain Messages postés 2 Statut Membre
     
    Bonjour,

    Voici une solution 100% MySQL qui répond au problème posé... il y a 18 mois.

    Pour info, ça utilise les "variables utilisateurs" de MySQL.
    Documentation : http://dev.mysql.com/doc/refman/5.0/fr/variables.html

    -- Réinitialisation si requête déjà exécutée depuis l'ouverture de la connexion
    SET @jourPrec = NULL;
    
    SELECT r.ID, r.Datedujour, NumeroJour.IDJ, r.NomduPatient, r.Age, r.Sexe
    FROM rendezvous r
    JOIN (
      SELECT
        ID,
        CASE
          WHEN @jourPrec = Datedujour THEN @IDJ := @IDJ + 1
          ELSE @IDJ := 1
        END AS IDJ,
        @jourPrec := Datedujour
      FROM rendezvous
      ORDER BY DateDuJour, ID
    ) NumeroJour
      ON NumeroJour.ID = r.ID
    ORDER BY r.DateDuJour, r.ID
    


    Important : dans la sous-requête, il ne faut pas changer l'ordre des champs "Datedujour" et "IDJ" !

    Table et données pour tester :

    CREATE TABLE rendezvous (
      ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
      Datedujour DATE NOT NULL,
      NomduPatient VARCHAR(255) NOT NULL,
      Age TINYINT UNSIGNED NOT NULL,
      Sexe ENUM('M', 'F') NOT NULL,
      PRIMARY KEY (ID)
    );
    INSERT INTO rendezvous (ID, Datedujour, NomduPatient, Age, Sexe) VALUES
    (1, '2012-01-11', 'D', 22, 'M'),
    (2, '2012-01-11', 'Z', 8, 'M'),
    (3, '2012-01-15', 'C', 12, 'F'),
    (4, '2012-01-17', 'A', 20, 'M'),
    (5, '2012-01-17', 'S', 52, 'F'),
    (6, '2012-01-17', 'F', 63, 'F');
    
    0
    1. adda
       
      Salut,
      Et la réponse donnée était plus claire, pus juste et 100% SQL aussi...

      Utiliser simplement ORDER BY
      0