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

Symfony PHP Discussion :

Requêtes assez complexes [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut Requêtes assez complexes
    Bonjour à tous,
    Je cherche à effectuer une requête sous Doctrine, qui me permet d'afficher les sorties de la semaine (au cinéma ou en DVD).
    Le problème est que lorsque l'on arrive en fin d'année (vers le 28 décembre 2009), les sorties de la semaine du 2 janvier 2009 sont affichées alors que je voudrais celle du 2 janvier 2010 bein sur !
    Sur mon ancien site (pas sous Symfony), j'ai une ancienne requête qui fonctionne mais qui est assez complexe... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $today = getdate();
    			$year = $today['year'];
    			$year_up = $year + 1;
    			$sql = "SELECT left(resume,50) as deb_resume, id_films, image, titre, date_sortie_cinema, date_sortie_dvd, realisateur, acteur, duree FROM `films` WHERE WEEK(date_dvd) = WEEK(curdate()) && `date_sortie_dvd` != '' AND (`date_dvd` LIKE '$year%' OR `date_dvd` LIKE '$year_up%') AND TO_DAYS(NOW()) - TO_DAYS(date_dvd) < 30 ORDER BY `date_dvd` DESC LIMIT 10";
    Je récupère la date d'aujourd'hui pour avoir dans 2 variables l'année en cours et l'année suivante pour ainsi faire ma requête en fonction de l'année, ainsi, je n'affiche pas les sorties du 2 janvier 2009, 2008, 2007... mais celle de 2010 !

    Puis-je utiliser toutes ces fonctions pour ma requête doctrine également ?

    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    Ne peux-tu pas utiliser dans ta requête un BETWEEN déjà pour commencer ?

    Ensuite, je te dirais de travailler avec des mktime. C'est assez simple à utiliser et tellement pratique.
    Disons, tu prends le premier jour de ta semaine le 28 décembre 2009 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_debut = mktime(0, 0, 0, 12, 28, 2009);
    $date_fin = mktime(0, 0, 0, 12, 28+7, 2009);
    et dans ta requête, tu travailles avec le between et ces deux dates.

  3. #3
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Merci pour cette réponse. Par contre juste une chose :
    - 28 + 7 = 35. En fonction du mois c'est remis à zéro ? C'est-à-dire que 28 décembre + 7 jours = 4 janvier et 28 février + 7 jours = 7 mars ?

  4. #4
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    En fait, le mktime n'a pas cette notion de jour, mois ou encore d'année, il travaille sur un entier.
    Celui-ci est généré à partir des secondes, minutes, heures, jour, mois et année.
    Il gère tout tout seul :p
    Une fois que tu as ton mktime, il suffit de le passer en paramètre à ta fonction date() au bon format et tu auras toujours la date que tu souhaites

    A partir d'un mktime, tu peux également récupérer la date du lundi suivant ou du jeudi précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtotime('Last Monday', $mktime)
    Regarde du côté des fonctions de date php, il y a vraiment de quoi faire

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Une autre possibilité, moins propre que celles que vous avez évoquées. Disons pour être franc, bestial.

    Modification de la structure, on rajoute un integer avec l'année et la semaine. Style 1011 pour la 11ème semaine de 2010. Bon, on risque un problème en 2100...

    Avantage, ce qui va consommer le plus sur ton serveur ce sera les requêtes, vu que les mise à jour de films sont beaucoup plus rare. Donc on augmente la rapidité de la requête en déportant le gros du calcul sur la mise a jour. Au global on devrait y gagner sur les interrogations. Ok, on fait aussi une dérogation aux formes normales, mais elles sont là pour cela.

  6. #6
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Finalement, je me suis aidé de Jobeet, voici mon code pour les films sortant au cinéma la semaine prochaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $q = Doctrine_Query::create()
    	  ->from('film f')
    	  ->where('f.datetime_sortie_cinema > ?', date('Y-m-d H:i:s', time() + 86400 * 7))
    	  ->AndWhere('f.datetime_sortie_cinema < ?', date('Y-m-d', time() + 86400 + 14));
    	  $this->films = $q->execute();
    Merci de votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête assez complexe
    Par Omega15 dans le forum SQL
    Réponses: 3
    Dernier message: 09/02/2012, 16h07
  2. [AC-2003] requête assez complexe
    Par eric232 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/08/2011, 15h31
  3. [AC-2003] Requête assez complexe
    Par Apopis01 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 30/12/2009, 11h11
  4. Requête assez complexe
    Par Naruto_kun dans le forum Développement
    Réponses: 1
    Dernier message: 12/02/2009, 17h50

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