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

PHP & Base de données Discussion :

[Doctrine] Requête avec condition


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut [Doctrine] Requête avec condition
    Bonjour à tous !

    Voilà mon pb, j'ai une requête dans laquelle j'ai une condition.
    Mais je ne sais pas comment la gérer .

    Voilà mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    if($poste=='Matin'){
    	 $horaire_deb = '04:00';
    	 $horaire_fin = '12:00';
    }
    else if($poste=='Journee'){
    	 $horaire_deb = '12:00';
    	 $horaire_fin = '20:00';
    }
    else if($poste=='Nuit'){
    	$horaire_deb = '20:00';
    	$horaire_fin = '23:59';
    										// ex: $date = '2010-02-03'
    	$an_mois = substr($date, 0, 7); 				// ex: 2010-02
    	$jr = substr($date, -2);						// ex: 03
    	$jr_lendemain = $jr+'01';						// ex: 4
    	$lendemain = $an_mois."0".$jr_lendemain;	// ex: 2010-02-04
     
    	$horaire_deb_2 = '00:00';
    	$horaire_fin_2 = '04:00';
    }
     
    $req = $this->createQuery('s')
    			->select('NumTraitement')
    			->from('TTraitement')
    			->where('TType2traitement_NumType = 1')
    			->andWhere('DateTraitement = ?', $date)
    			->andWhere('HeureTraitement > ?', $horaire_deb)
    			->andWhere('HeureTraitement < ?', $horaire_fin);
     
    if($poste == 'Nuit'){
    	$req = $req.->orWhere('DateTraitement = ?', $lendemain)
    				->andWhere('HeureTraitement > ?', $horaire_deb_2)
    				->andWhere('HeureTraitement < ?', $horaire_fin_2);
    }
     
    return $req->count();
    Je dois compter le nombre de traitement qu'a fait une équipe pour tel ou tel jour. Ca marche pour l'équipe de matin et celle de journée.
    Le problème c'est que l'équipe de nuit est à cheval sur deux jours. Donc il faut que je rajoute à ma requête le lendemain de 00:00 à 04:00 pour compter cb elle en a fait au total.

    Et je ne vois pas comment ajouter ceci à ma requête...

    Qqun peut m'éclairer svp?
    Merci d'avance

  2. #2
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    et t'as pas d'erreurs avec cette structure sous php ?

    bon ça mis apart.


    ça c'est pour la nuit.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req = "
    SELECT NumTraitement
    FROM TTraitement
    WHERE TType2traitement_NumType = 1
    AND (DateTraitement = '".$date."'
       AND HeureTraitement > '".$horaire_deb."')
    OR (DateTraitement  = DATE_ADD('".$date."',INTERVAL 1 DAY)
       AND HeureTraitement < '".$horaire_fin_2."')

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut
    Merci pour ta rapidité !

    En fait, je vois bien la requête qu'il faut pour la nuit. Mais je ne vois pas comment l'ajouter à ma requête précédente .

    J'ai pensé à une autre méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public function getListeNbPoste($date, $poste){
     
     	if($poste=='Matin'){
     		$horaire_deb = '04:00';
     		$horaire_fin = '12:00';
     	}
     	else if($poste=='Journee'){
     		$horaire_deb = '12:00';
     		$horaire_fin = '20:00';
     	}
     	else if($poste=='Nuit'){
     		$horaire_deb = '20:00';
     		$horaire_fin = '23:59';
    													// ex: $date = '2010-02-03'
     		$an_mois = substr($date, 0, 7); 				// ex: 2010-02
     		$jr = substr($date, -2);						// ex: 03
     		$jr_lendemain = $jr+'01';						// ex: 4
     		$lendemain = '\''.$an_mois.'0'.$jr_lendemain.'\'';	// ex: 2010-02-04
     
     		$horaire_deb_2 = '00:00';
     		$horaire_fin_2 = '04:00';
     	}
     
     	$req = $this->createQuery('s')
    				->select('COUNT(NumTraitement)')
    				->from('TTraitement')
    				->where('TType2traitement_NumType = 1')
    				->andWhere('DateTraitement = ?', $date)
    				->andWhere('HeureTraitement > ?', $horaire_deb)
    				->andWhere('HeureTraitement < ?', $horaire_fin);
     
     	$res = $req->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
     
     	if($poste == 'Nuit'){
     		$req = $this->createQuery('s')
    					->select('COUNT(NumTraitement)')
    					->from('TTraitement')
    					->where('TType2traitement_NumType = 1') 
    					->andWhere('DateTraitement = ?', $lendemain)
    					->andWhere('HeureTraitement > ?', $horaire_deb_2)
    					->andWhere('HeureTraitement < ?', $horaire_fin_2);
     
     		$res = $res + ($req->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR));
     	}
     
     	return $res;
    }
    En fait, le problème vient de $lendemain. Quant je met '2010-02-03' ça marche bien, ms pas avec ma variable.
    J'ai essayé en mettant des ' ... ' autour mais rien.

    Vous voyez mon erreur ?

  4. #4
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    tu peux calculer facilement le lendemain grace aux fonction SQL
    comme date_add()

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTraitement  = DATE_ADD('".$date."',INTERVAL 1 DAY)

    après je ne vois pas bien comment ton objet fonctionne.

    mais ça ne fonctionnerais pas ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    $req = $this->createQuery('s')
    				->select('COUNT(NumTraitement)')
    				->from('TTraitement')
    				->where('TType2traitement_NumType = 1')
    				->andWhere('DateTraitement = ?', $date)
    				->andWhere('HeureTraitement > ?', $horaire_deb)
    				->andWhere('HeureTraitement < ?', $horaire_fin);
     
       $res = $req->count();
     
       if($poste == 'Nuit'){
          $req = $this->createQuery('s')
             ->select('COUNT(NumTraitement)')
             ->from('TTraitement')
             ->where('TType2traitement_NumType = 1')
             ->andWhere('DateTraitement = ?', $lendemain)
             ->andWhere('HeureTraitement > ?', $horaire_deb_2)
             ->andWhere('HeureTraitement < ?', $horaire_fin_2);
     
          $res += $req->count();
       }
     
       return $res;

  5. #5
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    j'ai lu un peux la doc et il semblerais mieux de faire un truc de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    if($poste == 'Matin'
    || $poste == 'Journee') {
       $req = $this->createQuery('s')
    	         ->select('NumTraitement')
    	         ->from('TTraitement')
    	         ->where('TType2traitement_NumType = 1')
    	         ->andWhere('DateTraitement = ?', $date)
    	         ->andWhere('HeureTraitement > ?', $horaire_deb)
    	         ->andWhere('HeureTraitement < ?', $horaire_fin);
     
       $res = $req->count();
    }elseif($poste == 'Nuit'){
       $req = $this->createQuery('s')
                   ->select('NumTraitement')
                   ->from('TTraitement')
                   ->where('TType2traitement_NumType = 1 AND DateTraitement = DATE_ADD(?, INTERVAL 1 DAY) AND HeureTraitement = ? AND HeureTraitement = ?', array($date, $horaire_deb_2, $horaire_fin_2))
                   ->orWhere('TType2traitement_NumType = 1 AND DateTraitement = ? AND HeureTraitement = ? AND HeureTraitement = ?', array($date, $horaire_deb, $horaire_fin));
     
       $res = $req->count();
    }else return false;
    j'espare t'aider.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut
    Un graaaaaand merci à toi hiul dragonfel !

    Ca marche.

    Voilà mon code pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    $req = $this->createQuery('s')
    	 		->select('NumTraitement')
    	 		->from('TTraitement')
    	 		->where('TType2traitement_NumType = 1')
    	 		->andWhere('DateTraitement = ?', $date)
    	 		->andWhere('HeureTraitement > ?', $horaire_deb)
    	 		->andWhere('HeureTraitement < ?', $horaire_fin);
     
    	 	$res = $req->count();
     
    if($poste == 'Nuit'){
    	 $req = $this->createQuery('s')
    	 			->select('NumTraitement')
    	 			->from('TTraitement')
    	 			->where('TType2traitement_NumType = 1') 
    	 			->andWhere('DateTraitement = DATE_ADD(?, INTERVAL 1 DAY)', $date)
    	 			->andWhere('HeureTraitement > ?', $horaire_deb_2)
    	 			->andWhere('HeureTraitement < ?', $horaire_fin_2);
     
    	 $res = $res + ($req->count());
    }
    Il me retourne bien ce que je veux !

    Mais je trouve ton dernier code, sur le dernier post, mieux organisé que le mien, je reprends donc ton idée, je vais le mettre en ordre !

    Merci à toi !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut
    Voilà mon code final, mieux structuré qu'au début je trouve !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public function getListeNbPoste($date, $poste){
     
     	if($poste=='Matin'){
     		$horaire_deb = '04:00';
     		$horaire_fin = '12:00';
     	}
     	else if($poste=='Journee'){
     		$horaire_deb = '12:00';
     		$horaire_fin = '20:00';
     	}
     	else if($poste=='Nuit'){
     		$horaire_deb = '20:00';
     		$horaire_fin = '23:59';
     
     		$horaire_deb_2 = '00:00';
     		$horaire_fin_2 = '04:00';
     	}
     
     	if($poste == 'Matin' || $poste == 'Journee') {
     
    	 	$req = $this->createQuery('s')
     					->select('NumTraitement')
     					->from('TTraitement')
     					->where('TType2traitement_NumType = 1')
     					->andWhere('DateTraitement = ?', $date)
     					->andWhere('HeureTraitement > ?', $horaire_deb)
     					->andWhere('HeureTraitement < ?', $horaire_fin);
     
    	 	$res = $req->count();
     
    	}
     
     	else if($poste == 'Nuit'){
     		$req = $this->createQuery('s')
    					->select('NumTraitement')
    					->from('TTraitement')
    					->where('TType2traitement_NumType = 1 
    							AND DateTraitement = DATE_ADD(?, INTERVAL 1 DAY)
    							AND HeureTraitement > ?
    							AND HeureTraitement < ?',
    							array($date, $horaire_deb_2, $horaire_fin_2))
    					->orWhere('TType2traitement_NumType = 1 
    								AND DateTraitement = ?
    								AND HeureTraitement > ?
    								AND HeureTraitement < ?',
    								array($date, $horaire_deb, $horaire_fin));
     
     		$res = $req->count();
     	}
     
    	return $res;
    }

  8. #8
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    c'est naturel.

    entre programmeurs on s'entre aide

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

Discussions similaires

  1. [MySQL] Requête avec condition sur un champ
    Par nonhosonno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 14h00
  2. [MySQL] pb de requête avec conditions, débutant
    Par carelha dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 30/11/2006, 19h35
  3. Requête avec condition
    Par lolo_bob2 dans le forum Access
    Réponses: 1
    Dernier message: 08/06/2006, 19h59
  4. [Requête]Requête avec condition
    Par Miles Raymond dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 23/05/2006, 08h30
  5. Calcul requête avec conditions multiples
    Par Phullbrick dans le forum Access
    Réponses: 7
    Dernier message: 18/04/2006, 13h45

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