Position d'un élément basée sur le regroupement d'éléments identiques - SQL/NoSQL - Programmation
Marsh Posté le 18-10-2017 à 18:44:01
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é :
|
J'ai cherché trop compliqué...
Marsh Posté le 22-10-2017 à 11:34:41
Si tu es sous Oracle tu trouveras ton bonheur avec les fonctions analytiques RANK et DENSE_RANK
Marsh Posté le 22-10-2017 à 18:03:30
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.
Marsh Posté le 23-10-2017 à 10:10:10
ReplyMarsh Posté le 23-10-2017 à 21:07:23
TotalRecall a écrit : Lire la doc, faire une recherche, essayer des trucs ? |
Merci pour cette suggestion très utile
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.
Marsh Posté le 18-10-2017 à 10:31:31
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