|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
Bonsoir à toutes et tous,
après avoir fouillé le forum et m'être trituré les méninges une bonne partie de la journée (et de la dernière nuit également), je me résous à faire appel à vos lumières ; j'en profite d'ailleurs pour m'excuser par avance si la réponse se trouve déjà dans vos archives. Je souhaite stocker dans une table des informations susceptibles d'être modifiées dans le temps. Par ailleurs je voudrais que les modifications soient enregistrées sans écraser l'ancienne valeur afin de conserver un historique. Enfin, je veux pouvoir enregistrer à l'avance des modification à compter d'une certaine date. Dans cette optique j'ai une table qui ressemble, en gros à ça : +-------+------------------+-------------+-----------------+ |...id...|...parent_id...|...valeur...|.....début.....| +-------+------------------+-------------+-----------------+ |...1....|........1.........|......10.....|..2012-01-13.| # l'item 1 est créé avec une valeur de 10 |...2....|........2.........|......10.....|..2012-01-13.| # l'item 2 est créé avec une valeur de 10 |...3....|........1.........|......15.....|..2012-01-15.| # l'item 1 prendra la valeur 15 |...4....|........2.........|......50.....|..2012-01-18.| # l'item 2 prendra la valeur 50 |...5....|........1.........|....100.....|..2012-01-20.| # l'item 1 prendra la valeur 100 +-------+------------------+-------------+-----------------+ Premièrement, je souhaite savoir si ma méthode n'a pas un gros vice caché que je n'aurais pas remarqué. Cette table me donne satisfaction sauf au moment d'afficher la fois la valeur courante et les modifications prévues : je ne parviens pas à sélectionner à la fois les valeurs futures (avec debut>CURDATE() ) et la valeur courante (avec debut<CURDATE() ORDER BY debut DESC LIMIT 0,1 ). Je ne parviens à mes fins qu'en faisant 2 requêtes et je me dis qu'un cas comme le mien ne doit pas être exceptionnel et qu'une solution doit exister. J'ai bien pensé à rajouter une colonne "fin" mais ça me semble redondant vu qu'on peut la déduire de la colonne "debut". Bref, j'ai besoin d'un peu d'aide pour monter ma super requête qui sélectionne la valeur courante à la date voulue ainsi que les modifications ultérieures. Je vous remercie par avance de l'attention que vous me prêterez; et bonne soirée Yann |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Une piste mais je ne suis pas satisfait de la requête : Code :
|
||
|
|
10
|
|
|
#3 |
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
Merci beaucoup !
Je ne connaissait le principe de l'UNION ; je vais poursuivre mes recherche dans ce sens car ça me semble être une solution plus élégante que les jointures (j'avais un peu tenté ce type de requêtes mais ça vire très rapidement à l'usine à gaz). Je vous tiens au courant pour mettre un [résolu] dès que j'aurais établi ma requête définitive. |
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
Comme prévu, la clause UNION a parfaitement fait son office et je récupère ma sélection à l'aide de la requête :
Code :
Yann |
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
Bon, finalement, ma requête n'est pas si aboutie : la première partie, chargée de récupérer, pour chaque parent_id la dernière date n'est pas suffisamment sélective : elle identifie, pour un parent_id, la date la plus récente et renvoie toutes les lignes dont la valeur de la colonne 'debut' correspond, quelquesoit la valeur de parent_id... ça sort donc quelques valeurs périmées.
Ma recherche continue donc... |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
Bonsoir, merci de m'accorder votre temps.
A vrai dire, j'ai un peu de mal à débrouiller votre requête : l'usage de 'dt_mvt' provoque une erreur du fait que cet alias n'a semble-t-il pas été défini. Et comme je patine un peu, je ne parviens pas à corriger l'erreur. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
hmm effectivement, remplacez dt_mvt par la date "début"
|
|
|
00
|
|
|
#9 | ||
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
La requête que vous m'avez proposée ne renvoie malheureusement que la dernière date passée et pas les dates futures.
Je suis donc retourner peaufiner mon UNION et j'ai enfin retrouvé le bonheur grâce à : Code :
Au final, la solution n'était pas si compliquée. Encore merci pour votre aide. Yann |
||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Code :
Quand on fait un group by toutes les colonnes du select non encadrées par un fonction d’agrégation (min, max, etc) doivent être présente dans la clause group by |
||
|
|
00
|
|
|
#11 | ||
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
... en tous cas, on ne peut pas dire que vous avez manqué de patience avec le mauvais élève que je suis.
Je n'ose vous soumettre ma nouvelle tentative de peur de connaître un nouvel échec. Code :
Merci pour votre aide. Yann |
||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
votre nouvelle requête me semble pas mal (attention, toute fois, vous avez dupliqué la condition sur le parent_id), même si niveau perf je me demande si ceci ne serai pas mieux : Code :
|
||
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : janvier 2012 Messages : 13 ![]() |
J'ai testé votre requête pour comparer mais elle souffre d'un petit défaut : la partie qui sert à la jointure ne retourne qu'un seul résultat (la dernière date passée de la table) et pas la dernière date pour chaque parent_id.
Du coup, je ne reçoit qu'un seul résultat passé alors que j'en voudrais un par parent_id. Au final, je vais me contenter pour le moment de ma solution ; évidemment si je parviens à optimiser la chose je vous le ferai savoir. Merci tout de même pour votre aide qui m'a permis d'en apprendre un peu plus sur le requêtage et qui m'a orienté dans la bonne direction. Yann |
|
|
00
|
|
|
#14 | |||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Citation:
Code :
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com