Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1089 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Interrogation SQL avec une période de dates

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interrogation SQL avec une période de dates

n°2121374
kaobar
Posté le 14-01-2012 à 18:31:24  profilanswer
 

Bonjour et Bonne et heureuse année à toutes et à tous,
 
voila j'ai besoin d'un peu d'aide.
 
J'ai une base de donnée dans laquelle il y à:
 
- un champ debut au format date,
- un champ fin au format date, (YYYY-mm-dd)
- un champ periode au format varchar.
- un champ id
 
 j'interroge cette base avec ceci:
 
$date = date("Y-m-d" );
   
 
  mysql_select_db($database_dbprotect, $bdd);
 
  $query_users = "SELECT * FROM periodes WHERE (debut <= $date) AND (fin >= $date) ";  
 
  $users = mysql_query($query_users, $bdd) or die(mysql_error());
         while ( $row_users = mysql_fetch_assoc($users)) {
 
   $session = $row_users['periode'];
   }  
 
mais je n'arrive pas à afficher l'enregistrement qui correspont à:
 
compris entre debut, aujourd'hui, fin
 
un peu d'aide SVP!!!
merci par avance.....

mood
Publicité
Posté le 14-01-2012 à 18:31:24  profilanswer
 

n°2121861
neo-blaste​r
Posté le 17-01-2012 à 16:16:38  profilanswer
 

Coucou,
 
Si je comprendre bien, dans ta requête, tu demande les enregistrements dont le debut = aujourd'hui et la fin = aujourd'hui.
En effet, tu déclare la variable $date = date("Y-m-d" ); Cette fonction t’écris la date au format 2012-01-18. Ça correspond bien au format de la base de donnée.
 
Cependant, je pense qu'il ne peu y avoir de période (dans ton concept) ou le début, la fin et aujourd'hui ai la même valeurs. Au pire des cas, il pourrait y avoir plusieurs possibilité.
 
Je ne vois pas de Mysql_fetch_array(); dans ton code. Est-ce normal. Même si le résultat est unique, il y a plusieurs champs (SELECT *) donc le résultat est sous forme de tableau
 
Autre chose, j'ai testé une requete pour savoir si les opérateurs <= et >= fonctionnait avec les dates. J'avais 3 dates: 2012-01-18, 2012-01-19 et 2012-01-20, lorsque je demandais > à 2012-01-18, j'avais les trois champs qui s'affichait. Je ne pense pas que l'on puisse utiliser les opérateurs logique avec les dates.
 
Pour pallier à celà, tu peut utiliser le BETWEEN ou IN.
 
Avant d'aller je vais attendre ta réponse concernant le fait que début, ajdh et fin aient la même valeur.
De plus j'aimerais comprendre plus largement le fonctionnement de ton script. A l'insertion de l'enregistrement, quel sont les données enregistré. J'imagine que le début est renseigné avec la date : YYYY-MM-JJ, le champ fin n'est pas remplis.  
 
Moi j'ai un programme ou j'enregistre toutes les connexions des sessions utilisateur en base de donnée via un script à l'ouverture de session.
L'enregistrement s'effectue ainsi: (c'est une requête mysql en bat faisant appel à l'application mysql.exe qu préalablement mise dans le system32)
 

Code :
  1. mysql -h 192.168.0.11 -u ***n -p*** -e "use logregistry; INSERT INTO logregistry VALUES('NULL','%USERNAME%','%COMPUTERNAME%','%ip%','%DATE% - %TIME%', 'N/A')"


 
Pour la fermeture de session on à ceci:
 

Code :
  1. mysql -h 192.168.0.11 -u *** -p*** -e "use logregistry; SET @ID = (SELECT MAX(ID) FROM Logregistry WHERE Username='%USERNAME%' AND Computername ='%COMPUTERNAME%' AND Logoff='N/A'); UPDATE logregistry SET Logoff='%DATE% - %TIME%' WHERE ID=@ID;


 
Il met à jour l'information de l'utilisateur à l'aide de son nom d'utilisateur et à l'aide de 'N/A' qui veut dire chez moi que la session est toujours active. Il peut y avoir plusieurs 'N/A' pour un utilisateur, mais dans la majorité des cas, les utilisateur n'ouvrent pas plusieurs sessions en même temps. Si jamais la session à buggé, l'utilisateur quand il se connecte plus tard, créer un nouvelle enregistrement et mettra à jour la dernière entrée. Ainsi j'ai également un visuelle sur les bugs de session.
 
j'attend des nouvelles. Hésite pas à me MP, voir même m'envoyer des mails ici: neo-blaster@hotmail.fr afin de mieu cerné le problème !!
 

n°2122749
philippe06
Posté le 22-01-2012 à 15:00:52  profilanswer
 

si on peut utiliser les opérateurs logiques avec les dates à condition de les quoter.
 
Soit:
 
  $query_users = "SELECT * FROM periodes WHERE (debut <= '$date') AND (fin >=' $date') ";  


---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)
n°2122918
MEI
|DarthPingoo(tm)|
Posté le 23-01-2012 à 14:40:12  profilanswer
 

Ouai enfin si on exploite au mieux le SQL c'est plutôt ça :

Code :
  1. select
  2.     *
  3. from
  4.     TABLE
  5. where
  6.     CHAMPS_DATE not between :date_debut and :date_fin
  7. ;


Message édité par MEI le 23-01-2012 à 14:41:12

---------------
| AMD Ryzen 9 5950X 16C/32T @ 3.4-4.9GHz - 64GB DDR4-3600 16-18-18 1T - AMD Radeon RX 5700 XT 8GB @ 2010MHz/14Gbps |
n°2122928
philippe06
Posté le 23-01-2012 à 16:07:01  profilanswer
 

pourquoi 'not' ? Y a t il une différence de performance entre les 2?

 

EDIT: non aucune http://stackoverflow.com/questions [...] mance-over

Message cité 1 fois
Message édité par philippe06 le 23-01-2012 à 16:08:25

---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)
n°2122944
MEI
|DarthPingoo(tm)|
Posté le 23-01-2012 à 16:59:29  profilanswer
 

philippe06 a écrit :

pourquoi 'not' ? Y a t il une différence de performance entre les 2?
 
EDIT: non aucune http://stackoverflow.com/questions [...] mance-over


Parce qu'il veux ce qui est avant la date1 et après la date2, donc ce qui n'est pas entre date1 et date2. ;)
 
Pour les performances, de manière général (pas que sur le between), ça dépendra toujours des SGBD, mais pour Oracle, que j'utilise tout les jours, il va de toutes façons réécrire ta requête avant de la passé à l’optimiser, et par exemple, between ou in son réécrit avec des clauses where.
 
Le but est d'avant tout faire une requête lisible et compréhensible par les autres développeurs.

Message cité 1 fois
Message édité par MEI le 23-01-2012 à 17:00:30

---------------
| AMD Ryzen 9 5950X 16C/32T @ 3.4-4.9GHz - 64GB DDR4-3600 16-18-18 1T - AMD Radeon RX 5700 XT 8GB @ 2010MHz/14Gbps |
n°2122947
philippe06
Posté le 23-01-2012 à 17:08:37  profilanswer
 

MEI a écrit :


Parce qu'il veux ce qui est avant la date1 et après la date2, donc ce qui n'est pas entre date1 et date2. ;)


J'ai compris l'inverse d'après   $query_users = "SELECT * FROM periodes WHERE (debut <= $date) AND (fin >= $date) ";  

MEI a écrit :


Pour les performances, de manière général (pas que sur le between), ça dépendra toujours des SGBD, mais pour Oracle, que j'utilise tout les jours, il va de toutes façons réécrire ta requête avant de la passé à l’optimiser, et par exemple, between ou in son réécrit avec des clauses where.


Comme MySQL qu'utilise l'auteur du thread, c'est un sucre syntaxique.

MEI a écrit :


Le but est d'avant tout faire une requête lisible et compréhensible par les autres développeurs.


 
Tout à fait. Personnellement je comprends mieux des <= et >= que des BETWEEN, les BETWEEN ca me fait penser à du cobol  [:milfnduck lover:3]  


---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Interrogation SQL avec une période de dates

 

Sujets relatifs
pb de connexion SQL/ODBC via PHPExport données MS SQL vers csv avec PHP
Impossible de lancer SQL Server AgentVmware et SQL Server
Recherche cours perfectionnement SQLrecherche d'algo convertissant des dates en toutes lettres
MCD/MLD, req algébrique/ req SQL, exercice de base[C] Tri par insertion simple & pointeurs de dates
SQL & JavaDates oracles justes à l'affichage mais fausses dans BD Oracle
Plus de sujets relatifs à : Interrogation SQL avec une période de dates


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR