Selection selon un intervalle de dates

Selection selon un intervalle de dates - PHP - Programmation

Marsh Posté le 03-05-2004 à 14:54:27    

Bonjour à tous,
 
Je cherche à réccupéré des champs contenu dans une base de données PostgreSQL dans un intervalle de dates.
 
Schéma de la base :
 

heure   timestamp without time zone
anomalie  text


 
Voici ce que j'affiche à l'écran :
 

2004-04-09 12:21:03   TEST01
2004-04-09 12:25:19  ERROR 404
2004-04-09 12:26:59  ERROR 505
2004-04-09 12:27:20  mise a jour de la base de donnees
2004-04-09 12:27:41  Shutdown
2004-05-03 14:08:54  apt-get
2004-05-03 14:23:32  TEST


 
 
Je voudrai savoir comment récuppéré les messages contenu dans un intervalle que je défini...
 
 
Merci :jap:


Message édité par ptibat le 03-05-2004 à 14:55:22

---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 14:54:27   

Reply

Marsh Posté le 03-05-2004 à 15:10:37    

Tu peux pas le faire directement dans ta requete ?
Tu choisis une plage de date bien precise.

Reply

Marsh Posté le 03-05-2004 à 15:11:28    

le rapport avec php?
si c'est stocké dans une bd, il faut que tu modifie ta requête SQL plutôt [:proy]

Reply

Marsh Posté le 03-05-2004 à 15:17:34    

En fait j'ai fait 2 comboBox dans un formulaire (pour un test) et lorsque je click sur OK voici ce que
 
 

Code :
  1. <?
  2. if (($_POST['date_debut']!='') && ($_POST['date_fin']!=''))
  3. {
  4.    echo $_POST['date_debut'];
  5. }
  6. ?>
  7. <?
  8. echo "<form name='cherche_anomalies' method='post' action=$PHP_SELF>";
  9. $search = "SELECT heure FROM anomalies_restauration";
  10. $affiche_tableau = pg_exec($search);
  11. echo "<select name='date_debut'>";
  12. while($tableau = pg_fetch_array($affiche_tableau))
  13.  {
  14.   $heure = $tableau['heure'];
  15.   echo "<option value=$heure>$heure";
  16.  }
  17. echo "</select>&nbsp;";
  18. $search = "SELECT heure FROM anomalies_restauration";
  19. $affiche_tableau = pg_exec($search);
  20. echo "<select name='date_fin'>";
  21. while($tableau = pg_fetch_array($affiche_tableau))
  22.  {
  23.   $heure = $tableau['heure'];
  24.   echo "<option value=$heure>$heure";
  25.  }
  26. echo "</select>&nbsp;<input type='submit' value='OK'></form>";
  27. ?>


 
      echo $_POST['date_debut'];  DONNE :  
 

2004-05-03


et non 2004-05-03 14:23:32   :pt1cable:


Message édité par ptibat le 03-05-2004 à 15:18:29

---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 15:55:33    

Change
 echo "<option value=$heure>$heure";  
par
 echo "<option value='$heure'>$heure";

Reply

Marsh Posté le 03-05-2004 à 16:05:46    

Sebastien a écrit :

Change
 echo "<option value=$heure>$heure";  
par
 echo "<option value='$heure'>$heure";


 
Impec, j'ai bien le résultat avec ce format 2004-04-09 12:21:03.  :hello:   :jap:  
 
 
Comment puis-je selectionner les champs qui correspondent à l'intervalle choisit ?


Message édité par ptibat le 03-05-2004 à 16:05:56

---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 16:16:06    

Ton code est quand meme à revoir je pense.
Je verais plus les choses comme ca :
4champs : date debut, heure debut, date fin, heure fin.
Les dates et les heures n'etant pas forcement ceux qu'il y a dans ta base mais des données arbitraires (imagine ta requete le jour ou tu as plus de 500 ano, vla les selects)
 
ensuite pour selection dans ta base ben

Code :
  1. //Les tests initiaux ont été approuvés.
  2. $debut = $_POST['date_debut'].' '.$_POST['heure_debut']; //date_debut et heure_debut ont la meme synthaxe que heure dans la table ano
  3. $fin = $_POST['date_fin'].' '.$_POST['heure_fin'];
  4. $sql = "SELECT ce_ki_va_bien FROM anomalies_restauration
  5. where heure >= '$debut' and heure <= '$fin'";


Apres tu peux ameliorer ta requete, par exemple si $fin > $debut alors affichage des données dans le sens chronologique inverse

Reply

Marsh Posté le 03-05-2004 à 17:00:41    

Sebastien a écrit :

Ton code est quand meme à revoir je pense.
Je verais plus les choses comme ca :
4champs : date debut, heure debut, date fin, heure fin.
Les dates et les heures n'etant pas forcement ceux qu'il y a dans ta base mais des données arbitraires (imagine ta requete le jour ou tu as plus de 500 ano, vla les selects)
 
ensuite pour selection dans ta base ben

Code :
  1. //Les tests initiaux ont été approuvés.
  2. $debut = $_POST['date_debut'].' '.$_POST['heure_debut']; //date_debut et heure_debut ont la meme synthaxe que heure dans la table ano
  3. $fin = $_POST['date_fin'].' '.$_POST['heure_fin'];
  4. $sql = "SELECT ce_ki_va_bien FROM anomalies_restauration
  5. where heure >= '$debut' and heure <= '$fin'";


Apres tu peux ameliorer ta requete, par exemple si $fin > $debut alors affichage des données dans le sens chronologique inverse


 
Merci je test de suite.  :jap:


Message édité par ptibat le 03-05-2004 à 17:24:24

---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 17:23:54    

Sebastien a écrit :

Je verais plus les choses comme ca :
4 champs : date debut, heure debut, date fin, heure fin.


 
Avec un format de date comme 2004-05-03 14:23:32, comment spécifié que $date debut = 2004-05-03 et que $heure debut= 14:23:32 ?  :pt1cable:.
 
(ou alors j'ai pas compris la methode :heink:)
 
Merci  :jap:


---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 17:36:31    

tu fais un premier select avec juste les dates
2004-05-01
2004-05-02
2004-05-03
etc (tu peux t'amuser à reformater au format FR si tu veux)
pour les heures pareils
00h00
00h15
00h30
...
15h15
15h30
...
 
 
normalement le format date reconnait le 15:30 comme un 15:30:00

Reply

Marsh Posté le 03-05-2004 à 17:36:31   

Reply

Marsh Posté le 03-05-2004 à 17:54:29    

Sebastien a écrit :

tu fais un premier select avec juste les dates
2004-05-01
2004-05-02
2004-05-03
etc (tu peux t'amuser à reformater au format FR si tu veux)
pour les heures pareils
00h00
00h15
00h30
...
15h15
15h30
...
 
normalement le format date reconnait le 15:30 comme un 15:30:00


 
 
Justement, je n'arrive pas à séparé la date et l'heure du champ 2004-05-03 14:23:32. Pourtant c'est faisable ?  :??:  
 


---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 19:00:12    

bien sur il y a pleins de fonction SQL qui le font
des DATE, left, etc, tu as que l'embarras du choix

Reply

Marsh Posté le 03-05-2004 à 20:14:03    

Sebastien a écrit :

bien sur il y a pleins de fonction SQL qui le font
des DATE, left, etc, tu as que l'embarras du choix


 
Peut-tu m'expliquer comment faire ?
Parcque là je galère grave  :pt1cable:


---------------
flick r
Reply

Marsh Posté le 03-05-2004 à 21:27:12    

a l'arrach
left(heure,10) va te ressortir que le 2004-05-01

Reply

Marsh Posté le 04-05-2004 à 00:14:26    

Sebastien a écrit :

a l'arrach
left(heure,10) va te ressortir que le 2004-05-01


 
Merci j'ai trouvé ca pour accèder au fonctions :
 

Code :
  1. function left($str,$nbr)
  2.  {
  3.    return substr($str,0,$nbr);
  4.  }
  5. function right($str,$nbr)
  6.  {
  7.    return substr($str,-$nbr);
  8.  }


Mais pour l'instant vu l'heure tardive je selectionne l'intervalle avec la forme de départ (2004-04-09 12:21:03). Et demain je commencerai avec les left() et right().
 
Merci pour les renseignement :jap:
 
 


---------------
flick r
Reply

Marsh Posté le 04-05-2004 à 09:26:20    

Tu pouvais faire directement le left et le right dans ta requete SQL

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed