MSSQL Problem
Fermé
bilelwebdev
-
7 août 2008 à 16:03
mjmdurand Messages postés 246 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 27 juillet 2013 - 7 août 2008 à 17:22
mjmdurand Messages postés 246 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 27 juillet 2013 - 7 août 2008 à 17:22
A voir également:
- MSSQL Problem
- Connection php et mssql ✓ - Forum Webmastering
- DBConvert for Access & MSSQL - Télécharger - Gestion de données
- [MSSQL] Remplacement des caractères spéciaux - Forum SQL Server
24 réponses
Salut,
Perso, ce n'est peut-être pas la meilleure solution mais je stockerais tout ça dans un tableau et je bidouillerais avec des if()... et donc à grands coups de soustraction :)
Perso, ce n'est peut-être pas la meilleure solution mais je stockerais tout ça dans un tableau et je bidouillerais avec des if()... et donc à grands coups de soustraction :)
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 16:26
7 août 2008 à 16:26
essaye de creer une table avec comme champs (minimum) id,nom,entrée,sortie,jour
a chaque sortie, on insert le timestamp actuel (avec time() )dans la colone sortie
a chaque entrée, on insert le timestamp actuel (avec time() )dans la colone entrée
a chaque action (entrée ou sortie) on insert le timestamp actuel (avec time() )dans la colone jour
apres, on va definir les dates de selection :
pour cela, on utilise mktime qui se parametre comme ceci :
mktime(heure,minute,seconde,mois,jour,annee)
$matin= mktime(0, 0, 0, 2, 15, 2008);
$soir= mktime(0, 0, 0, 2, 16, 2008);
apres, on fait notre requete sql
$retour='"SELECT *FROM "nom de table" WHERE jour BETWEEN '$matin' AND '$soir'");
puis, on va effectuer les calculs
while ($donnees=mysql_fetch_array($retour))
{
$entree=$entree+$donnees['entree'];
$sortie=$sortie+$donnees['sortie'];
}
$temps_travail=$sortie - $entree;
echo $donnees['nom'].' a travaillé '.date('H:i', $temps_travail);
voila
a chaque sortie, on insert le timestamp actuel (avec time() )dans la colone sortie
a chaque entrée, on insert le timestamp actuel (avec time() )dans la colone entrée
a chaque action (entrée ou sortie) on insert le timestamp actuel (avec time() )dans la colone jour
apres, on va definir les dates de selection :
pour cela, on utilise mktime qui se parametre comme ceci :
mktime(heure,minute,seconde,mois,jour,annee)
$matin= mktime(0, 0, 0, 2, 15, 2008);
$soir= mktime(0, 0, 0, 2, 16, 2008);
apres, on fait notre requete sql
$retour='"SELECT *FROM "nom de table" WHERE jour BETWEEN '$matin' AND '$soir'");
puis, on va effectuer les calculs
while ($donnees=mysql_fetch_array($retour))
{
$entree=$entree+$donnees['entree'];
$sortie=$sortie+$donnees['sortie'];
}
$temps_travail=$sortie - $entree;
echo $donnees['nom'].' a travaillé '.date('H:i', $temps_travail);
voila
tout d'abord, merci par votre réponse,
J'ai pensé à votre idée avant de déposer le problème sur le forum, tu sais pour quoi? car le DDL de la table est plus compliqué puisqu'elle est crée par un système automatique de pointage (on n'a pas l'accès à modifier la structure de la table), donc je cherche à trouver un solution en PHP/MSSQL pour résoudre ce problème,
j'attends votre réponse.
J'ai pensé à votre idée avant de déposer le problème sur le forum, tu sais pour quoi? car le DDL de la table est plus compliqué puisqu'elle est crée par un système automatique de pointage (on n'a pas l'accès à modifier la structure de la table), donc je cherche à trouver un solution en PHP/MSSQL pour résoudre ce problème,
j'attends votre réponse.
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 16:33
7 août 2008 à 16:33
ah en mssql, c'est pas en mysql plutot ?
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
>
bilelwebdev
7 août 2008 à 17:19
7 août 2008 à 17:19
T-SQl pour une MS SQL (microsoft SQL)
Moi je ferais, pour chaque enregistrement :
SI l'action est une sortie, tu prends la date de sortie et tu lui enlève la date d'entrée de l'enregistrement précédent
tu incrémentes ça à ton total et tu boucles
SI l'action est une sortie, tu prends la date de sortie et tu lui enlève la date d'entrée de l'enregistrement précédent
tu incrémentes ça à ton total et tu boucles
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 16:44
7 août 2008 à 16:44
tu peut les avoir qu'au format YYYY-MM-JJ HH:MM:SS et pas au format HH:MM:SS MM-JJ-YYYY ?
tu fais un getDate et tu récupére heures, minutes et secondes : https://www.php.net/manual/fr/function.getdate.php
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 16:49
7 août 2008 à 16:49
le probleme de getdate, c'est qu'ici, on ne peut pas obtenir de timestamp vu que le format n'est pas le bon.
de plus, on obtiendrait les renseignement du timestamp actuel non ?
de plus, on obtiendrait les renseignement du timestamp actuel non ?
Non si on fournit le parametre getdate($date), ça retourne les infos de $date.
C'est vrai que c'est génant pour le format je n'avais pas fait gaffe....
'Faut trouver un moyen de la formater....Mais comment? :s
C'est vrai que c'est génant pour le format je n'avais pas fait gaffe....
'Faut trouver un moyen de la formater....Mais comment? :s
Ben dans ce cas, je penses que tu dois faire plusieurs explode et faire une suite de tests pour récupérer les bonnes infos et les formater... Non?
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 17:02
7 août 2008 à 17:02
J'AI TROUVE !!!!!
format de base : YYYY-MM-JJ HH:MM:SS
format recherché : HH:MM:SS MM-JJ-YYYY
on ignore les 10 premiers caracteres
$debut=substr($date,10)
on obtient donc HH:MM:SS
$milieu=substr($date,-14,5 )
on obtient donc MM-JJ
$fin=substr($date,-19,4)
on obtient donc YYYY
$date=$debut.$milieu.'-'.$fin
format de base : YYYY-MM-JJ HH:MM:SS
format recherché : HH:MM:SS MM-JJ-YYYY
on ignore les 10 premiers caracteres
$debut=substr($date,10)
on obtient donc HH:MM:SS
$milieu=substr($date,-14,5 )
on obtient donc MM-JJ
$fin=substr($date,-19,4)
on obtient donc YYYY
$date=$debut.$milieu.'-'.$fin
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 17:07
7 août 2008 à 17:07
je sais ! je m'en suis rendu compte apres avoir posté (car quand j'écrivais, je ne voyais pas les nouveaux messages)
IL DOIT Y AVOIR UNE SOLUTION
euhh... un crayon, du papier , une calculatrice, ca irait comme solution ?
IL DOIT Y AVOIR UNE SOLUTION
euhh... un crayon, du papier , une calculatrice, ca irait comme solution ?
voici comme je fais pour retourner les enregistrements de la table système:
function emp_sql_select()
{
global $conn, $_POST;
if(!isset($_SESSION['lname']) && !isset($_SESSION['fname'])){
$_SESSION['lname']=$_POST['lname'];
$_SESSION['fname']=$_POST['fname'];
}
$sql = "SELECT REC_DAT,DESCRP,LOCATION,LNAME,FNAME FROM EV_LOG WHERE day(REC_DAT) = day(GETDATE()) and month(rec_dat) = month(GETDATE()) and year(rec_dat)=year(getdate()) and upper(LNAME)=upper('" .
$_SESSION['lname'] . "') and upper(FNAME)=upper('" . $_SESSION['fname'] . "')";
$res = mssql_query($sql, $conn);
return $res;
}
on donne:$conn l'objet de connexion.
Donc on doit traiter ceci:
$res = emp_sql_select();
$row = mssql_fetch_assoc($res);
on doit alors traiter $row['REC_DAT'], comment faire alors pour résoudre le problème??
function emp_sql_select()
{
global $conn, $_POST;
if(!isset($_SESSION['lname']) && !isset($_SESSION['fname'])){
$_SESSION['lname']=$_POST['lname'];
$_SESSION['fname']=$_POST['fname'];
}
$sql = "SELECT REC_DAT,DESCRP,LOCATION,LNAME,FNAME FROM EV_LOG WHERE day(REC_DAT) = day(GETDATE()) and month(rec_dat) = month(GETDATE()) and year(rec_dat)=year(getdate()) and upper(LNAME)=upper('" .
$_SESSION['lname'] . "') and upper(FNAME)=upper('" . $_SESSION['fname'] . "')";
$res = mssql_query($sql, $conn);
return $res;
}
on donne:$conn l'objet de connexion.
Donc on doit traiter ceci:
$res = emp_sql_select();
$row = mssql_fetch_assoc($res);
on doit alors traiter $row['REC_DAT'], comment faire alors pour résoudre le problème??
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 17:09
7 août 2008 à 17:09
ou sinon, crée une autre table vu que tu ne peut pas la modifier. lol !
Je ferais :
$tab1= explode(" ", $date);
$tab2 = explode(":", $tab[0]);
$date = $tab1[1]." ".$tab2[1]."-".$tab2[2]."-".$tab2[0];
$tab1= explode(" ", $date);
$tab2 = explode(":", $tab[0]);
$date = $tab1[1]." ".$tab2[1]."-".$tab2[2]."-".$tab2[0];
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 17:12
7 août 2008 à 17:12
prem's ! lol
Merci vous deux, mes amis, demain je chercherais à trouver la solution en exploitant vos idées d'or.
avec tous mes respects.
avec tous mes respects.
Ouais ben je réitère ma proposition sauf qu'y faut faire des tests pour avoir le "AUG" et le "AM".... :s
mjmdurand
Messages postés
246
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2013
44
7 août 2008 à 17:14
7 août 2008 à 17:14
faudrait étudier le mssql je pense