[RESOLU] Php/PostgreSQL

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 : [RESOLU] Php/PostgreSQL

Re: Php/PostgreSQL

par Marie1994 » 16 juin 2015, 08:25

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 :)

Re: Php/PostgreSQL

par yann18 » 16 juin 2015, 00:10

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

par Marie1994 » 15 juin 2015, 23:25

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

par yann18 » 15 juin 2015, 23:21

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

par Marie1994 » 15 juin 2015, 23:10

Merci pour vos réponses. La dernière solution n'affiche pas d'erreur mais n'affiche rien du tout. :(

Re: Php/PostgreSQL

par yann18 » 15 juin 2015, 23:02

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

par tof73 » 15 juin 2015, 22:59

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

par Marie1994 » 15 juin 2015, 22:35

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

par @rthur » 15 juin 2015, 22:26

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

par Marie1994 » 15 juin 2015, 22:17

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

par @rthur » 15 juin 2015, 22:09

Bonjour,

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

Php/PostgreSQL

par Marie1994 » 15 juin 2015, 20:47

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