Page 1 sur 1

Php/PostgreSQL

Posté : 15 juin 2015, 20:47
par Marie1994
Bonjour,

Je me trouve dans l’embarras. En effet, j'utilise une simple requête SQL qui fonctionne très bien :

"SELECT count(*) FROM transac WHERE date_debut BETWEEN to_timestamp(to_char(Now()::timestamptz, 'YYYY-MM-DD')||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND to_timestamp(to_char(Now()::timestamptz, 'YYYY-MM-DD')||' 12:00:00', 'YYYY-MM-DD HH24:MI:SS')"

Et qui me compte donc les transaction effectuées aujourd'hui entre 00h00 et 12h00.

Je souhaite effectuer la même requête mais sur la veille (remplacement du Now() par hier).

J'ai essayé je nombreuses choses :

$hier = date('Y-m-d', strtotime('-1 day'));
$reponse6M2 = $bdd->query("SELECT count(*) FROM transac WHERE date_debut BETWEEN (to_timestamp(to_char(".$hier."))||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND (to_timestamp(to_char(".$hier.")))) ||' 11:59:59', 'YYYY-MM-DD HH24:MI:SS')");

$reponse6A2 = $bdd->query("SELECT count(*) FROM transac WHERE date_debut BETWEEN to_timestamp(to_char(SUBTIME(Now(), '1 0:0:0.0')::timestamptz, 'YYYY-MM-DD')||' 00:00:00 ', 'YYYY-MM-DD HH24:MI:SS') AND to_timestamp(to_char(SUBTIME(Now(), '1 0:0:0.0')::timestamptz, 'YYYY-MM-DD')||' 11:59:59', 'YYYY-MM-DD HH24:MI:SS')");

Mais aucune de ces solutions (et des autres dont je vous passe les détails) ne fonctionnent.

Si quelqu'un peut m'éclairer sur le sujet, j'en serai ravie.

Marie

Re: Php/PostgreSQL

Posté : 15 juin 2015, 22:09
par @rthur
Bonjour,

Tu peux remplacer NOW() par DATE_ADD(CURDATE(), INTERVAL -1 day) pour avoir la date d'hier

Re: Php/PostgreSQL

Posté : 15 juin 2015, 22:17
par Marie1994
Tout d'abord un grand merci pour ta réponse.
Cependant, sur tes conseils, j'obtiens cette erreur :

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\ParkingProject\adminStats.php on line 127

La ligne 127 étant $donnees6M2 = $reponse6M2->fetch();

Re: Php/PostgreSQL

Posté : 15 juin 2015, 22:26
par @rthur
Ce message d'erreur indique que ta variable $reponse6M2 n'est pas un objet donc il faut que tu regardes où tu l'initialises.

Si c'est bien ton query MySQL alors il y a de grande chance pour qu'elle ait échoué donc teste ta requête SQL dans phpMyAdmin pour la corriger.

Re: Php/PostgreSQL

Posté : 15 juin 2015, 22:35
par Marie1994
Oui, tu as raison. La requete ne fonctionne pas mais je ne comprends pas. J'ai juste substituer Now() par ta solution :

SELECT count(*) FROM transac WHERE date_debut BETWEEN to_timestamp(to_char(DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -1 day))::timestamptz, 'YYYY-MM-DD')||' 12:00:01', 'YYYY-MM-DD HH24:MI:SS') AND to_timestamp(to_char(DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -1 day))::timestamptz, 'YYYY-MM-DD')||' 23:59:59', 'YYYY-MM-DD HH24:MI:SS')

Re: Php/PostgreSQL

Posté : 15 juin 2015, 22:59
par tof73
la solution doit fonctionner pour mysql mais là donc est avec postgresql donc :
http://www.postgresql.org/docs/9.0/stat ... etime.html

Re: Php/PostgreSQL

Posté : 15 juin 2015, 23:02
par yann18
Je souhaite effectuer la même requête mais sur la veille (remplacement du Now() par hier).
le simple pour sélectionner les transactions d'hier entre 00h et 12h c'est de comparer la date stockée en bd avec la date d'hier
$hier = date('Y-m-d', strtotime('-1 day'));
$sql="SELECT count(*) FROM transac WHERE date_debut::timestamp BETWEEN '$hier 00:00:00'::timestamp AND '$hier 
12:00:00'::timestamp";
echo $sql;
une fois la requête affichée, tu peux l'exécuter directement dans un interpréteur postgres( phpgadmin par exemple).

Re: Php/PostgreSQL

Posté : 15 juin 2015, 23:10
par Marie1994
Merci pour vos réponses. La dernière solution n'affiche pas d'erreur mais n'affiche rien du tout. :(

Re: Php/PostgreSQL

Posté : 15 juin 2015, 23:21
par yann18
Merci pour vos réponses. La dernière solution n'affiche pas d'erreur mais n'affiche rien du tout. :(
j'ai certainement omis un point virgule après echo $sql.je viens d'éditer mon message en ajoutant le ";".
tu peux essayer d'afficher cette requête en dehors de ton projet pour ensuite l'exécuter directement depuis un interpréteur postgres.

Re: Php/PostgreSQL

Posté : 15 juin 2015, 23:25
par Marie1994
Si je le copie tel quel ça m'affiche la requête sur ma page (le texte brut de la requête).

Du coup j'ai adapté :

$reponse6M2= $bdd->query("SELECT count(*) FROM transac WHERE date_debut::timestamp BETWEEN '$hier 00:00:00'::timestamp AND '$hier 12:00:00'::timestamp");

$donnees6M2 = $reponse6M1->fetch();

echo $donnees6M2['count'];

Mais ça n'affiche rien :(

Re: Php/PostgreSQL

Posté : 16 juin 2015, 00:10
par yann18
tu dois forcement utiliser un interpréteur sql pour créer la BD, les tables par exemple?
il est question d'exécuter directement la requête suivante dans un interpréteur postgres ( via la console sql ou via phpPgadmin):

Code : Tout sélectionner

SELECT count(*) FROM transac WHERE date_debut::timestamp BETWEEN '2015-06-14 00:00:00'::timestamp AND '2015-06-14 12:00:00'::timestamp
Si la requête te retourne le résultat attendu tu peux alors l'intégrer dans ton code php puis procéder au débogage.

Re: Php/PostgreSQL

Posté : 16 juin 2015, 08:25
par Marie1994
Un très grand merci à vous. Première fois que je me rends sur votre forum et ravie de votre réactivité et de votre gentillesse.

Bonne continuation et encore merci :)