Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1786 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Position d'un élément basée sur le regroupement d'éléments identiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Position d'un élément basée sur le regroupement d'éléments identiques

n°2306767
depart
Posté le 18-10-2017 à 10:31:31  profilanswer
 

J'avoue que je galère un peu pour trouver un titre à ma question.
 
Voilà ce que j'ai besoin de faire :
j'ai une table de rendez-vous, chaque rendez-vous est associé à un client. Un client peut avoir plusieurs rendez-vous bien sûr
 
Sur une page d'agenda j'aimerai afficher pour chaque rendez-vous le numéro (position) de ce rendez-vous : est-ce le premier, le second... de ce client
 
j'ai une table "rdv"
rdv_id
client_id
date
 
je fais une petite jointure sur la table "client" pour afficher le nom, prénom...
 
donc ma requête actuelle est du genre :
 

SELECT r.rdv_id, r.client_id, r.date, c.nom, c.prenom
FROM rdv r
INNER JOIN client c ON r.client_id = c.client_id
WHERE r.date BETWEEN '$date1' AND '$date2'
ORDER BY r.date


nota : PHP/MySQL
 
Maintenant pour afficher le numéro de la position du rendez-vous (en se basant sur la date) il faudrait que je fasse un select imbriqué en comptant pour chaque rdv le nombre de rdv du même client_id avec une date inférieur à la date du rdv courant... là j'avoue que je patauge un peu dans la semoule.  
Même chose pour chercher je veux bien des suggestions de mots clés. J'ai trouvé quelques trucs sur stackoverflow mais ça ne répond pas trop à ma demande :(
 
J'aimerai éviter :  
- de refaire 1 requête SQL par rendez-vous
- de stocker la position en BDD parce que c'est généralement encore plus le bazar à gérer (insertion d'un nouveau rendez-vous = il faut tout recalculer et mettre à jour puisque le nouveau peut être entre 2 déjà programmés - le rdv 5 devient 6, le rdv 6 devient 7...) je ferai ça si je m'en sors pas autrement, mais ça me parait overkill.


Message édité par depart le 18-10-2017 à 10:35:31
mood
Publicité
Posté le 18-10-2017 à 10:31:31  profilanswer
 

n°2306784
depart
Posté le 18-10-2017 à 18:44:01  profilanswer
 

Bon je devais être bien embrumé, c'est plus simple qu'il n'y parait, il suffit d'ajouté un sub-select et c'est plié :
 


SELECT r.rdv_id, r.client_id, r.date, c.nom, c.prenom,
(SELECT count(rdv_id) FROM rdv r2 WHERE r2.client_id = rdv.client_id AND r2.date <= rdv.date ) AS position
FROM rdv r
INNER JOIN client c ON r.client_id = c.client_id
WHERE r.date BETWEEN '$date1' AND '$date2'
ORDER BY r.date


 
J'ai cherché trop compliqué...


Message édité par depart le 18-10-2017 à 18:44:16
n°2306903
molmock
Rythm is love ....
Posté le 22-10-2017 à 11:34:41  profilanswer
 

Si tu es sous Oracle tu trouveras ton bonheur avec les fonctions analytiques RANK et DENSE_RANK ;)

n°2306905
TotalRecal​l
Posté le 22-10-2017 à 18:03:30  profilanswer
 

Le monsieur a dit mysql.
Mais il me semble que MySQL supporte aussi Rank (et les autres window functions) mais j'ai bien peur que ça soit ultra récent, à vérifier.


---------------
Topic .Net - C# @ Prog
n°2306915
depart
Posté le 23-10-2017 à 10:08:52  profilanswer
 

Des suggestions du coup avec rank?

n°2306916
TotalRecal​l
Posté le 23-10-2017 à 10:10:10  profilanswer
 

Lire la doc, faire une recherche, essayer des trucs ?


---------------
Topic .Net - C# @ Prog
n°2306930
depart
Posté le 23-10-2017 à 21:07:23  profilanswer
 

TotalRecall a écrit :

Lire la doc, faire une recherche, essayer des trucs ?


Merci pour cette suggestion très utile :o

 

Plus sérieusement l'idée c'est aussi de partager (note que j'ai posté la réponse à mon problème initial, je me suis pas cassé en disant juste "'c'est bon c'est réglé". Certes c'est pas stackoverflow, mais si on peut échanger et partager des expériences c' est sympa.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Position d'un élément basée sur le regroupement d'éléments identiques

 

Sujets relatifs
[Excel] macro outlook ne traite jamais dernier mail sauf si un seulEmplacement des élement (css)
système référentiel / masse vitesse et position relative.[Résolu] Mettre à jour/ajouter éléments dans un XML en C#
offset de plusieurs elementsFonction : Passer un élément d'array en paramètre
[JS/Xml] Parser des éléments en fonction de la balise contenante?Jquery - Clone d'elements imbriqués [RESOLU]
Comment recuperez le nombre d'element d'un enum ?[Java/NetBeans] ActionPerformed sur deux éléments "liés"
Plus de sujets relatifs à : Position d'un élément basée sur le regroupement d'éléments identiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR