Numéroter les lignes en fonction de la date

Fermé
Kanmegne - 12 janv. 2013 à 06:19
 adda - 10 juil. 2014 à 17:46
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.


A voir également:

6 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
12 janv. 2013 à 18:11
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
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
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
14 janv. 2013 à 11:50
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
Modifié par tryan44 le 15/01/2013 à 08:35
 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
ovillemain Messages postés 2 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 21 juillet 2015
Modifié par ovillemain le 10/07/2014 à 16:21
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
Salut,
Et la réponse donnée était plus claire, pus juste et 100% SQL aussi...

Utiliser simplement ORDER BY
0