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

[perl & mysql] incrementation d'une colone ok mais comment faire pour creer la clé en auto ?

4 réponses
Avatar
Ben
Bonjour à tous,
je ne sais pas si je déborde un peu du perl,
c'est 50% Perl et le reste mysql.
Désollé par avance si je me trompe de newsgroup.

Voila mon problème :
Je travail sur une base de statistique.
un exemple tout bête de connexion à un serveur.

ma table se compose :
- un champ login
- une date (pas d'heure)
- un nombre de connexion.

Le login et la date me servent de clé.

J'ai découvert que la fonction update permetait de faire des ajouts.
Imaginons, toto qui se connecte une Nieme fois dans une journée du 10
janvier,
on peut ajouter la valeur au compteur, genre faire
update tbl_stat set nb_connect = nb_connect + 1 where login = 'toto' and
date '2004-01-10';
ça ok pas de soucis, par contre si toto ne s'est pas encore connecté de la
journée,
ça ne marche pas.
Je rêverai que ça le crée automatiquement, qqun sait comment faire ?

Si ce n'est pas possible de le faire en natif mysql, comment procéder,
je vois 2 solutions :

$ins_sth->execute($requete_update) || $ins_sth->execute($requete_insert) ||
die "$req_insert marche pas";

soit qqch du genre :

$resultat = $ins_sth->execute($requete_update) ;
if ($resultat == 0) {ins_sth->execute($requete_insert);

Bon je sais pas si vous avez tout compris, mais si oui, les reflexions en
matière de
faisabilité et de performances seront plus que bienvenues ;o))))

Merci d'avance.

Benjamin.

4 réponses

Avatar
Laurent Wacrenier
Ben écrit:
Bonjour à tous,
je ne sais pas si je déborde un peu du perl,
c'est 50% Perl et le reste mysql.


100% MySQL.

J'ai découvert que la fonction update permetait de faire des ajouts.
Imaginons, toto qui se connecte une Nieme fois dans une journée du 10
janvier,
on peut ajouter la valeur au compteur, genre faire
update tbl_stat set nb_connect = nb_connect + 1 where login = 'toto' and
date '2004-01-10';
ça ok pas de soucis, par contre si toto ne s'est pas encore connecté de la
journée,
ça ne marche pas.
Je rêverai que ça le crée automatiquement, qqun sait comment faire ?


Utilise des transactions (tables de type InnoDB) :

BEGIN
UPDATE ...
si 0 colones sont concernées :
INSERT ...
COMMIT

BEGIN
SELECT ... FOR UPDATE
si 0 colones sont concernées :
INSERT ...
sinon
UPDATE ...
COMMIT

Avatar
Ben
merci pour ta reponse,
mais je ne comprend pas tout...je debute un peu en mysql (sql en general
d'ailleurs)

BEGIN
UPDATE ...
si 0 colones sont concernées :
INSERT ...
COMMIT

BEGIN
SELECT ... FOR UPDATE
si 0 colones sont concernées :
INSERT ...
sinon
UPDATE ...
COMMIT

Tu me dis que s'est du 100% mysql,

mais je ne sais pas faire un 'si' en mysql...

"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:

Ben écrit:
Bonjour à tous,
je ne sais pas si je déborde un peu du perl,
c'est 50% Perl et le reste mysql.


100% MySQL.



Avatar
Laurent Wacrenier
Ben écrit:
Tu me dis que s'est du 100% mysql,
mais je ne sais pas faire un 'si' en mysql...


Ta question c'est comment faire 'si' en perl ou tu te fous de la
gueule du monde ?

Avatar
Ben
"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:

Ben écrit:
Tu me dis que s'est du 100% mysql,
mais je ne sais pas faire un 'si' en mysql...


Ta question c'est comment faire 'si' en perl ou tu te fous de la
gueule du monde ?


Bon on a pas du bien se comprendre, j'vais remetre des bouts de posts
précedants :

moi :
Bonjour à tous,
je ne sais pas si je déborde un peu du perl,
c'est 50% Perl et le reste mysql.


toi :
100% MySQL.

mes exemples :
$ins_sth->execute($requete_update) || $ins_sth->execute($requete_insert) ||
die "$req_insert marche pas";
soit qqch du genre :
$resultat = $ins_sth->execute($requete_update) ;
if ($resultat == 0) {ins_sth->execute($requete_insert);
un peu de perl, un peu de sql

ta reponse :
BEGIN
UPDATE ...
si 0 colones sont concernées :
INSERT ...
COMMIT

BEGIN
SELECT ... FOR UPDATE
si 0 colones sont concernées :
INSERT ...
sinon
UPDATE ...
COMMIT



Donc si s'est du 100%mysql je soupsonne qu'il y ait moyen de faire un 'si'
avec
mysql, sinon s'est ton 100%mysql que j'ai mal compris...
et donc mes exemples resemblaient pas mal aux tients (les transac en moins
mais je voulais
pas surcharger encore plus mon post)