IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Recupérer un nombre d'éléments en fonction d'une date donnée


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut Recupérer un nombre d'éléments en fonction d'une date donnée
    Salut à tous,

    Je suis face à un problème qui peut paraitre simple, mais qui est en fait assez vicieux.

    En fait pour la faire simple, je veux récupérer 10 évènements dans ma table Evenement.
    Par contre, je veux récupérer ceux de la date du jour, ainsi que précédents et les suivants; le tout sur une période max d'un mois...

    Bien entendu, je veux travailler en SQL et n'effectuer qu'une seule requête. J'ai beau me creuser la tête, je suis un peu en galère

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 952
    Points
    3 952
    Par défaut
    Saluton,
    Il faudrait commencer par nous clarifier le cahier des charges.
    S'il existe 75 événements, 25 a la date du jour, 25 dans les 10 jours à venir et 25 dans les 10 jours passés, lesquels 10 événements doit-on prendre en compte ?

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Cela pourrait ressembler à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT id, dateEvent
    FROM (
        SELECT id, dateEvent FROM tableEvent WHERE dateEvent=CURRENT_DATE
        UNION ALL
        SELECT id, dateEvent FROM tableEvent WHERE dateEvent<CURRENT_DATE AND dateEvent>DATE_SUB(CURRENT_DATE, INTERVAL 15 DAY)
        UNION ALL
        SELECT id, dateEvent FROM tableEvent WHERE dateEvent>CURRENT_DATE AND dateEvent<DATE_ADD(CURRENT_DATE, INTERVAL 15 DAY)
    ) AS td
    ORDER BY dateEvent ASC
    Mais il nous faudrait des précisions (cf. message Maljuna Kris).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    En effet, je n'étais pas assez précis.

    S'il y en a 10 ou plus au jour j, on prend les 10 premiers, sans se prendre la tête...
    Ensuite, s'il y en a moins au jour j, il en faut autant avant ou après la date du jour.

    Par exemple :
    - Si 0 le jour même : 5 avant, 5 après => 5 + 0 + 5
    - Si 1 le jour même : 4 avant, 5 après => 4 + 1 + 5
    - ...
    - Si 4 le jour même : 3 avant, 3 après => 3 + 4 + 3
    - Si 5 le jour même : 2 avant, 3 après => 2 + 5 + 3

    3 sous requetes, c'est quand meme gourmand nan?
    En meme temps, c'est vrai que c'est la galère quand même

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 952
    Points
    3 952
    Par défaut
    En outre tout cela reste très théorique, s'il n'y en a pas (ou pas assez) avant ou après comment on gère la répartition ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Hum, bonne question. C'est vrai que cette tache paraissait simple, mais est loin de l'être!

    Si pas assez, pas de retour, tout simplement.
    Si moins de 10 actus en tout, et 0 au jour j ou après, on retourne les x d'avant...
    Dans la mesure du possible, on privilégie la récupération des évènements postérieurs. On peut par exemple avoir => 2 + 2 + 6

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 952
    Points
    3 952
    Par défaut
    Mon point de vue est que c'est ingérable en une seule requête.
    Sauf à faire l'UNION de 3 sous-requêtes, comme suggérer par Oishiiii, et de tripatouiller ensuite le résultat en langage procédural.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 178
    Points : 122
    Points
    122
    Par défaut
    Arg, c'est ce que je craignais...

    Bon, je vais m'arranger pour modifier le cahier des charges à ma façon

    Merci en tout cas

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/02/2010, 15h00
  2. Calcul du nombre de lignes en fonction d'une condition
    Par didier roustand dans le forum Débutez
    Réponses: 7
    Dernier message: 27/01/2010, 19h32
  3. [XL-2003] difference entre deux nombres en fonction d'une date
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 11/06/2009, 11h26
  4. Réponses: 14
    Dernier message: 16/04/2008, 15h31
  5. E-Mail dont les éléments sont fonction d'une variable
    Par j.p.mignot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo