Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sélectionner de ce mercredi au mardi suivant

Pour un programme ciné

    4 septembre 2010 à 11:54:13

    Bonjour,

    J'essaye de faire en sorte de pouvoir afficher le programme du mercredi au mardi.

    J'ai fait pour celà cette requete :
    WHERE (
    id_programme =278
    AND seance >= CURDATE( )
    AND DAYOFWEEK( CURDATE( ) ) <4
    AND seance < DATE_ADD( CURDATE( ) , INTERVAL( 4 - DAYOFWEEK( CURDATE( ) ) )
    DAY )
    )
    OR (
    id_programme =278
    AND seance >= CURDATE( )
    AND DAYOFWEEK( CURDATE( ) ) >= 3
    AND seance < DATE_ADD(DATE_SUB( CURDATE( ) , INTERVAL( DAYOFWEEK( CURDATE( ) ) -3 )DAY ), INTERVAL 1 WEEK)
    )
    


    Je n'ai mis que la partie qui concerne les conditions de sélection,
    Ca a l'air de fonctionner, mais je la trouve très "lourde" est-ce qu'il y aurait un moyen de simplifier ça svp ?
    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2010 à 20:27:39

      Ça sent le cinéma :)

      Si j'ai bien compris tu veux aller du mercredi qui vient au mardi suivant ?

      Déjà tu peux sortir les deux conditions en doublon :
      WHERE
      id_programme =278
      AND seance >= CURDATE( )
      AND
      ((
          DAYOFWEEK( CURDATE( ) ) <4
          AND seance < DATE_ADD( CURDATE( ) , INTERVAL( 4 - DAYOFWEEK( CURDATE( ) ) )
      DAY )
      )
      OR (
          DAYOFWEEK( CURDATE( ) ) >= 3
          AND seance < DATE_ADD(DATE_SUB( CURDATE( ) , INTERVAL( DAYOFWEEK( CURDATE( ) ) -3 )DAY ), INTERVAL 1 WEEK)
      ))
      

      • Partager sur Facebook
      • Partager sur Twitter
        4 septembre 2010 à 21:06:55

        Oui voilà, c'est ce que je veux faire.

        Au départ, ces deux conditions était mises à part, mais j'ai eu quelque pb, et je les ais remise à l'intérieur des deux grosses conditions, mais c'est vrai que logiquement à l'extérieur ca doit aussi fonctionner.

        Mais pensez vous que c'est bien comme j'ai fais, ce n'est pas lourd ?

        Genre je fais plusieurs fois DAYOFWEEK(CURDATE()), ca veut dire que le serveur doit a chaque fois exécuter ces fonctions là, ya pas moyen de les enregistrer dans une variable par exemple ? avec le AS ?

        Toute amélioration est la bienvenue ;)
        merci.
        • Partager sur Facebook
        • Partager sur Twitter
          4 septembre 2010 à 21:21:54

          Le AS n'économiserait que une ou deux fonctions DAYOFWEEK par entrée. Ce qui pourrait réduire considérablement le nombre de condition, serait d'enregistrer dans un petit TINYINT le numéro de la semaine (en comptant de mercredi à mardi). Et ainsi de ne comparer que ce numéro de semaine.

          Il y a aussi la fonction WEEK() qui permet de récupérer le numéro de la semaine. En rajoutant -2 tu peux peut-être obtenir l'effet recherché...
          • Partager sur Facebook
          • Partager sur Twitter

          Sélectionner de ce mercredi au mardi suivant

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown