problème de requète avec date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème de requète avec date

Re: problème de requète avec date

par schim59 » 26 août 2012, 19:43

AU lieu de rentrer les absences : 1 entrée = 1période, je ferais 1 entré = 1 jour.
Et séparer la table en 2 ou 3 pour plus de facilités.


1 table : employés
matricule
nom
prenom


1 table absence /jours (rempli quotidiennement ou par le biais d'une application) Soit 365/an
matricule
horaire prevu
motif

Re: problème de requète avec date

par msi79 » 26 août 2012, 19:20

salut merci de bien vouloir m'aider finalement voici comment j'ai procedé et ça me donne le resultat souhaité.
<?php
//Se connecter a la base de donnée 
include("conf.php");
// on crée la requête SQL
$sql = "SELECT * FROM abscence ";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
if(mysql_num_rows($req)>0)    
  {
    while ($liste_etu=mysql_fetch_assoc($req)){
	$DJ=date('d/m/Y');
	//$DJ=$liste_etu[''];
	$D=$liste_etu['debut'];
	$F=$liste_etu['fin'];
	    if($DJ>=$D AND $DJ<=$F){
	
?>
Mais je veux bien comprendre ton idée <<

EDIT : perso pour de la grh je ferai pluieures tables :
et je noterai une table ou 1 champ = 1 jour absence.>>.
Donc si tu pouvais bien m'expliquer .

Re: problème de requète avec date

par schim59 » 26 août 2012, 14:22

Pour afficher les absents entre la date 1 et la date 2 ?
+1 pour mettre les dates au format date.
je ferai

début et fin sont les début et fin d'absence ? alors :
sql0="SELECT matricule FROM absence WHERE fin>".$datecontrole." AND debut<". $datecontrole.";
Pour les absents le jour égale à $datecontrole.

pour une periode
sql0="SELECT matricule FROM absence WHERE fin between".$datecontrole." AND ".$datecontrole2." OR
debut between".$datecontrole." AND ".$datecontrole2.";
Par contre c'est absence et congé payé et jour non travaillé sans distinction ?

Bon codage.

EDIT : perso pour de la grh je ferai pluieures tables :
et je noterai une table ou 1 champ = 1 jour absence.

Re: problème de requète avec date

par xTG » 26 août 2012, 13:31

Pour utiliser BETWEEN il te faut des champs de type DATE et non VARCHAR.
Sinon c'est un algorithme alphabétique qui va être utilisé.

Re: problème de requète avec date

par msi79 » 26 août 2012, 11:17

--
-- Base de données: `drh_abs`

-- Structure de la table `abscence`


CREATE TABLE IF NOT EXISTS `abscence` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`num` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`date_Enr` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`service` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`nom` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`matricule` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`nbr_J` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`debut` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`fin` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`annee` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`motif` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`choix` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`date_rep_serv` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`heure_rep_serv` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`min_rep_serv` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`agent_signature` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`autorite_Ad` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`avis_DRH` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=5 ;

--
-- Contenu de la table `abscence`
--

INSERT INTO `abscence` (`id`, `num`, `date_Enr`, `service`, `nom`, `matricule`, `nbr_J`, `debut`, `fin`, `annee`, `motif`, `choix`, `date_rep_serv`, `heure_rep_serv`, `min_rep_serv`, `agent_signature`, `autorite_Ad`, `avis_DRH`) VALUES
(1, '1', '2012-04-23', 'daaf', 'coulibaly zana', '315282y', '3', '15/08', '18/08', '2012', 'A', 'oui', '19/08/2012', '07', '30', 'oui', 'oui', 'oui'),
(2, '2', '2012-04-23', 'daaf', 'keaut jean', '215282b', '3', '15/08', '18/08', '2012', 'A', 'Pexc', '19/08/2012', '07', '30', 'S', 'A', 'F'),
(3, '3', '2012-04-23', 'DEC', 'KONE yoman', '316452C', '3', '24/08/2012', '28/05', '2012', 'M', 'Pexc', '29/08/2012', '07', '30', 'S', 'NA', 'NF'),
(4, '4', '2012-08-26', 'DAAF', 'HERMANN COULIBALY', '231458B', '3', '2012-08-25', '2012-08-29', '2012', 'A', 'Pexc', '2012-08-30', '07', '30', 'S', 'A', 'F');
COMMIT;

Re: problème de requète avec date

par schim59 » 26 août 2012, 11:11

Bonjour,
Ta base de données est construite comment stp ?

problème de requète avec date

par msi79 » 26 août 2012, 10:41

salut j'ai un problème avec ma requète .je voudrai afficher les personnes abscentes mais j'arrive pas .
voici comment j'essaie de faire :

$debut = mysql_real_escape_string($_POST['date1']);
$fin = mysql_real_escape_string($_POST['$_POST['date2']);
$date_Enr = mysql_real_escape_string($_POST['date_Enr']); ===>correspond
NB : les champs des dates sont en VARCHAR
à la date du depart de l'agent.

voici ma requète :
  <?php
//Se connecter a la base de donnée 
include("conf.php");
$debut = $_POST['date1']; 
$fin = $_POST['date2']; 
 
$dateA = $debut;
$annee = substr($dateA, 6, 4);
$mois = substr($dateA, 3, 2);
$jour = substr($dateA, 0, 2);
//echo $jour . '-' . $mois . '-' . $annee;
//echo $annee . '/' . $mois . '/' . $jour; 
$date3=$annee . '-' . $mois . '-' . $jour;
 
$dateB = $fin;
$annee1 = substr($dateB, 6, 4);
$mois1 = substr($dateB, 3, 2);
$jour1 = substr($dateB, 0, 2);
//echo $jour1 . '-' . $mois1 . '-' . $annee1;
//echo $annee1 . '/' . $mois1 . '/' . $jour1; 
$date4=$annee1 . '-' . $mois1 . '-' . $jour1;
 
$clause = "(date_Enr BETWEEN '$date3' and '$date4')";
// on crée la requête SQL
//$date_du_jour = date('d/m/Y');
//$sql = "SELECT * FROM abscence WHERE '".$date_du_jour."'>= debut AND '".$date_du_jour."'<= fin  ORDER BY id";
$sql = "SELECT * FROM abscence WHERE ".$clause."ORDER BY id ";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
if(mysql_num_rows($req)>0){echo'<table  width="389" border="0" align="center">
  <tr>
    <td bgcolor="#999999"><blink>Il est TOUJOURS  encore en congé !!!!!!!!</blink></td>
  </tr>
</table>';} else{echo'<table  width="389" border="0" align="center">
  <tr>
    <td bgcolor="#999999"><blink>Il n\'est PLUS  encore en congé !!!!!!!!</blink></td>
  </tr>
</table>';}   
?>