Question timestamp

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 : Question timestamp

par Patriboom » 03 mars 2008, 04:49

Je crois que tu es sur une meilleure piste en réduisant ta table.
Fais attention, cependant, de donner de nom de champ qui soient semblables à des fonctions, ainsi, je te propose cette structure:

Code : Tout sélectionner

CREATE TABLE VS_matchs_events ( Id_match_events smallint(5) unsigned NOT NULL auto_increment, Id_match smallint(5) unsigned NOT NULL, Id_joueur int(11) NOT NULL, ActionFaite varchar(300) NOT NULL default '0', HeureAction timestamp NOT NULL, PRIMARY KEY (Id_match_events) ;
Tu viens, du coup d'éliminer ta limite de 24 actions par joueur.
Tu peux récupérer à volonté les action d'un joueur ou d'un match par des traitements "SELECT ... WHERE" adaptés à tes besoins.

Grâce au timestamp, tu pourras toujours replacer dans l'ordre chronologique et recréer la séquence au besoin, voire même trier les coups par action dans le temps ou ne garder que tel ou tel type d'action, puisque toutes ces informations seront gardées dans un seul champ.

Du moins, c'est ce qui me semble le meilleur à partir de ce que je comprends de ton projet.

par Foulensois » 03 mars 2008, 01:09

En fait c est une systeme de commentaires live pour une simulation que je suis en train de creer.

Voici comment le script doit se derouler :

- Toutes les x minutes, une action se deroule (pour determiner le x, j ai recours a la fonction rand),
- Lorsq une action se deroule, je dois l inscrire dans la bdd et celle ci est par la suite figee et affichee comme telle:

. Minute 1 : Debut de la partie
. Minute 5 : Premiere action...
. Minute 8 : Deuxieme action...

Je pense que je me suis plante dans la conception de la base, je pense que je devrais plutot avoir une table qui ressemble a ca et j affiche par la suite les resultats en fonction du timestamp:

Id_matchs_events, Id_match, Action, timestamp de base, timestamp

Pour inserer une nouvelle ligne, je me baserais sur le timestamp de base auquel j ajouterais les x minutes comme tu l as justement propose.

feriez vous d une autre maniere pour gerer un tel script ?

par Patriboom » 01 mars 2008, 14:44

Je ne comprends pas le problème.

D'une part, quel que soit le changement et la fréquence, ce que je te soumets ci-haut est applicable.
D'autre part, l'usage du timestamp est à vérifier si tu n'en utilises pas une de ses principales caractéristiques, soit la mise à jour instantanée. Si tu veux conserver la date d'inscription d'un enregistrement sans mise à jour instantanée, il serait peut-être préférable d'opter pour un champ de type date ou time.

par Foulensois » 01 mars 2008, 11:19

En fait une fois le update realise, le champ ne bougera plus. Il y a un evenement qui se produit toutes les x minutes et je l enregistre en tant qu action0, action1...
Le update se fait champ par champ obligatoirement ;)

Voici la structure de la table

Code : Tout sélectionner

CREATE TABLE VS_matchs_events ( Id_match_events smallint(5) unsigned NOT NULL auto_increment, Id_match smallint(5) unsigned NOT NULL, Action0 varchar(300) NOT NULL default '0', Action1 varchar(300) NOT NULL default '0', Action2 varchar(300) NOT NULL default '0', Action3 varchar(300) NOT NULL default '0', Action4 varchar(300) NOT NULL default '0', Action5 varchar(300) NOT NULL default '0', Action6 varchar(300) NOT NULL default '0', Action7 varchar(300) NOT NULL default '0', Action8 varchar(300) NOT NULL default '0', Action9 varchar(300) NOT NULL default '0', Action10 varchar(300) NOT NULL default '0', Action11 varchar(300) NOT NULL default '0', Action12 varchar(300) NOT NULL default '0', Action13 varchar(300) NOT NULL default '0', Action14 varchar(300) NOT NULL default '0', Action15 varchar(300) NOT NULL default '0', Action16 varchar(300) NOT NULL default '0', Action17 varchar(300) NOT NULL default '0', Action18 varchar(300) NOT NULL default '0', Action19 varchar(300) NOT NULL default '0', Action20 varchar(300) NOT NULL default '0', Action21 varchar(300) NOT NULL default '0', Action22 varchar(300) NOT NULL default '0', temps int(11) NOT NULL, PRIMARY KEY (Id_match_events) );

par Patriboom » 01 mars 2008, 06:37

Tu peux très bien renouveler ton timestamp en lui donnant sa propre valeur:
$requete = "UPDATE VS_matchs_events SET ChampTimestamp = ChampTimestamp, Action1 = 'Action1' WHERE Id_match_events =1 AND WHERE temps_ecoule < $temps_ecoule ";
Car le update peut s'appliquer à plusieurs champs en même temps, moyennant qu'ils soient séparés par des virgules.

Pour des questions semblables, pense qu'il est toujours opportun de fournir la structure de la base de données et - peut-être - de l'afficher dans Base de données - SQL

Question timestamp

par Foulensois » 29 févr. 2008, 23:58

Bonsoir a tous,

Je suis en train de m interroger sur une mise a jour de ma base de donnees avec 1 timestamp.

Si j utilise mon code comme il est actuellement, j aurais un update a chaque refresh, comment l eviter ?
<?php
$temps0 = 0;
$temps_ecoule = time() - ($temps0 * 60));
$requete = "UPDATE VS_matchs_events SET Action1 = 'Action1' WHERE Id_match_events =1 AND WHERE temps_ecoule < $temps_ecoule ";
$resultat = mysql_query($requete);

$temps1 = rand($temps0,5);
$temps_ecoule = time() - ($temps1 * 60));
$requete = "UPDATE VS_matchs_events SET Action2 = 'Action2' WHERE Id_match_events =1 AND WHERE temps_ecoule < $temps_ecoule ";
$resultat = mysql_query($requete);

?>
Une solution efficace serait de faire un select sur les champs avant leur update et de verifier s ils sont differents de 0 mais dans ce cas, ca me double le nombre de requetes sur la page qui comportent deja 20 update sans compter les affichages de resultat.
Avez vous une autre idee ?