[RESOLUT] Ajout de date avec conditions[PHP,MYSQL]

Eléphanteau du PHP | 12 Messages

24 févr. 2012, 15:28

Bonjour,

J'ai ce code
$SQL2= "INSERT INTO prices_history (WowID, Price, DateChecked)
	VALUES (" .$itemID.",".$stats->a->active->mkt. ",(NOW()))";
		$conn->query($SQL2);
Je le champ de la BDD est en DATETIME, je souhaiterais que la BDD ne se remplisse que si la dernière entrée a plus d'une heure.

J'ai beau chercher ICI et ailleur je ne trouve que des aides pour la récupération et pas pour l'insertion ... :cry:

Merci par avance pour votre aide ou vos liens si vous en avez.
Modifié en dernier par diablanc le 24 févr. 2012, 17:01, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

24 févr. 2012, 15:31

Pour pouvoir avoir la dernière entrée c'est une récupération non ? ^^

Eléphanteau du PHP | 12 Messages

24 févr. 2012, 15:36

Pour pouvoir avoir la dernière entrée c'est une récupération non ? ^^
Je comprend pas trop ta question mais d'après mes recherches , on peut récupérer ( SELECT) la dernière entrée dans la BDD avec :
$query = mysql_query("SELECT LAST_INSERT_ID()");
Mais je ne vois pas comment intégrer ça avec le NOW() et l'heure si c'est bien cette fonction qu'il faut que j'utilise :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 févr. 2012, 15:41

Salut,

Suivant le besoin je dirais une procédure stockée qui va la vérification et retourne true / false voir une levée d 'exception sur le sgbd pour l'afficher correctement ensuite (ou pas si l'on veux que la chose soit silencieuse. ).

@diableblanc : pkoi pas mal la il va refuser l'insertion si la
Dernière donnée à moins d'une heure. Donc en autoriser qu'une par heure.
C'est réalisable simplent sur le serveur en SQL (et évite les possible différence d'heure entre les serveurs ;) )

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 12 Messages

24 févr. 2012, 15:57

Salut,
Suivant le besoin je dirais une procédure stockée qui va la vérification et retourne true / false voir une levée d 'exception sur le sgbd pour l'afficher correctement ensuite (ou pas si l'on veux que la chose soit silencieuse. ).
Je debute et n'ais pas bien compris mais si ce n'est pas silencieux ça n'est pas bon pour moi :) .
@diableblanc : pkoi pas mal la il va refuser l'insertion si la
Dernière donnée à moins d'une heure. Donc en autoriser qu'une par heure.
C'est réalisable simplement sur le serveur en SQL (et évite les possible différence d'heure entre les serveurs ;) )
@+
La ça m'intéresse et je vais voir si je trouve comment faire sur MySQL.
(je posterais la solution quand je l'aurais et clôturerais le sujet)

=D> merci.

Eléphanteau du PHP | 12 Messages

24 févr. 2012, 17:00

Comme promis voila la solution que j'ai trouvé, je suis finalement passé par PHP pour le faire :

$heure_post = $conn->query("SELECT DATE_FORMAT(DateChecked, '%H:%i:%s') FROM prices_history 
 WHERE DATE_FORMAT(DateChecked, '%H:%i:%s') = MAX(DATE_FORMAT(DateChecked, '%H:%i:%s'))");
 $ifpost = mktime(0, 0, 0, date("H")+1, date("i"),   date("s"));
 if ($heure_post<$ifpost){
 $SQL2= "INSERT INTO prices_history (WowID, Price, DateChecked)
	VALUES (" .$itemID.",".$stats->a->active->mkt. ",(NOW()))";
		$conn->query($SQL2);
}

En gros je vais chercher l'heure dans datechecked ou l'heure etst la dernière entrée.
je donne une valeur ( $ifpost ) de référence.(heure actuelle + 1 heure)
Et si l'heure récupérée est inférieure à la valeur de référence on poste .


Voila j'espère que ça serviras à d'autres.
:D
Modifié en dernier par diablanc le 24 févr. 2012, 19:06, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 févr. 2012, 17:58

tu peu faire la même chose avec un seul appel au SGBD avec une procèdure stockée
sur mysql => http://dev.mysql.com/doc/refman/5.0/fr/ ... yntax.html, a regarde plus précisément il me semble que c'est qu'a partir de mysql 5 ^^

et un exemple de proc stock http://sqlpro.developpez.com/cours/sqlaz/fondements/#L8

@+
Il en faut peu pour être heureux ......