Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[mysql] recherche des derniers evenements

6 réponses
Avatar
Gilles RONSIN
bonjour,

j'utilise une table journal de type

index
-----
date
event1
event2
event3
autre

dans laquelle sont enregistrés des évenements éventuels et
indépendants.

Existe t'il une requête qui me permette de récupérer en une fois les
derniers états des évenements ?

pour l'instant je fait :
SELECT event1 FROM table WHERE event1<>'' ORDER BY DATE DESC LIMIT 1
et ce pour chaque évenement mais je trouve que c'est un peu lourd
surtout si le nombre d'évenement augmente.

merci pour vos idées.

6 réponses

Avatar
Thierry Thomas
Mercredi 23 avril 2008 à 11:57 GMT, Gilles RONSIN a écrit :
bonjour,



Bonsoir,

j'utilise une table journal de type

index
-----
date
event1
event2
event3
autre

dans laquelle sont enregistrés des évenements éventuels et
indépendants.

Existe t'il une requête qui me permette de récupérer en une fois les
derniers états des évenements ?



Ne serait-il pas possible de modifier la structure de cette table, pour
la normaliser ? Les événements devraient être dans une table fille, un
seul par enregistrement.
--
Th. Thomas.
Avatar
Gilles RONSIN
Thierry Thomas , le mer. 23 avr. 2008
20:58:41, écrivait ceci:

Existe t'il une requête qui me permette de récupérer en une fois
les derniers états des évenements ?



Ne serait-il pas possible de modifier la structure de cette table,
pour la normaliser ? Les événements devraient être dans une table
fille, un seul par enregistrement.



Salut,
L'évènement est simple : absent c'est vide, passage de OFF à ON c'est
'1', passage de ON à OFF c'est '0'
pour chaque évenement je veux retrouver la date où il a changé d'état.
Pas besoin d'une table fille; où alors je n'ai pas compris ce à quoi tu
penses.

Je pensais apprendre une requête de folie (je débute en mysql) car je
suis sûr de ne pas soupsonner 1/4 des possibilités des requêtes.

Pour mon problème, j'ai résolu en utilisant un champ d'état dans une
autre table, qui répertorie le dernier état connu !

Merci en tout cas de ta réponse.
Avatar
Jerome PAULIN
Gilles RONSIN a écrit :

Pour mon problème, j'ai résolu en utilisant un champ d'état dans une
autre table, qui répertorie le dernier état connu !




Combine cette table avec un trigger (pour les MAJ automatiques), et tu
auras ce dont tu as besoin : une table d'état et une table d'historique ...

gg
Avatar
Gilles RONSIN
Jerome PAULIN , le jeu. 24 avr.
2008 08:42:44, écrivait ceci:

Salut,

Combine cette table avec un trigger (pour les MAJ automatiques),
et tu auras ce dont tu as besoin : une table d'état et une table
d'historique ...



Désolé, je ne comprend pas. :-/
Actuellement j'ai effectivement une table d'état et une table
historique.
Qu'appelles-tu un trigger ? Qu'appelles-tu mise à jour automatique ?
Avatar
Jerome PAULIN
Gilles RONSIN a écrit :

Désolé, je ne comprend pas. :-/
Actuellement j'ai effectivement une table d'état et une table
historique.
Qu'appelles-tu un trigger ? Qu'appelles-tu mise à jour automatique ?



Comment mets tu ta table d'état à jour ? --> certainement via ton
application.

Un trigger est un système qui permet d'executer une action sur une table
lorsqu'il se produit un évènement sur une (autre) table.

exemple : lorsque l'on insère un enregistrement dans la table
historique, il est possible de mettre à jour automatiquement la table
d'état, au niveau de la base de données. Cela te permets de ne pas avoir
à gérer la mise à jour de la table d'état depuis ton application (il
suffit d'insérer un enregistrement dans la table historique). C'est très
pratique et simple a mettre en oeuvre (à partir de MySQL5).

Exemple :
j'ai une table projects (qui contient une liste de projets) et une table
teams (qui contient les membres de l'equipe projet). J'ai besoin
d'ajouter systématiquement un membre (appelon le le superviseur) dans
les projets nouveaux. J'ai donc créé le trigger suivant :

CREATE TRIGGER `projects_after_ins_tr` AFTER INSERT ON `projects`
FOR EACH ROW
BEGIN
insert into teams(project,member,published,authorized)
values(new.id,7,1,0);
END;

ce qui signifie : apres une insertion dans la table projects, insère un
enregistrement dans la table teams, puis je donne la valeur des champs a
inserer. new.id représente le id qui vient d'etre généré au niveau de la
table projects

Est ce que ce petit exemple te permets de mieux comprendre le principe
des triggers ?

gg
Avatar
Gilles RONSIN
Jerome PAULIN , le jeu. 24 avr.
2008 13:41:42, écrivait ceci:

Re,
Comment mets tu ta table d'état à jour ? --> certainement via ton
application.



En fait, j'ai un serveur de communication qui reçoit des données de
boîtiers dans la nature. Ce serveur de com, renseigne les tables en
fonction des paramètres transmis. J'écris donc la communication dans la
table historique, et maintenant je maintiens un flag de status en
fonction des évenements dans la table de propriété.

Un trigger est un système qui permet d'executer une action sur une
table lorsqu'il se produit un évènement sur une (autre) table.

exemple : lorsque l'on insère un enregistrement dans la table
historique, il est possible de mettre à jour automatiquement la
table d'état, au niveau de la base de données. Cela te permets de
ne pas avoir à gérer la mise à jour de la table d'état depuis ton
application (il suffit d'insérer un enregistrement dans la table
historique). C'est très pratique et simple a mettre en oeuvre (à
partir de MySQL5).



En effet c'est très interessant. Par contre, je ne suis pas sûr que ce
soit la meilleure solution dans mon cas (j'ai des vérifications voire
des données à retourner).

Exemple :
<snip>
CREATE TRIGGER `projects_after_ins_tr` AFTER INSERT ON `projects`
FOR EACH ROW
BEGIN
insert into teams(project,member,published,authorized)
values(new.id,7,1,0);
END;
<snip>
Est ce que ce petit exemple te permets de mieux comprendre le
principe des triggers ?



Toutafé. Je pense que je n'ai pas fini d'en apprendre sur les requêtes.
C'est d'ailleurs la principale raison de mes post ici. Même si j'ai une
solution, il y a souvent mieux à faire.

En tout cas merci pour ton cours. Très instructif.