Ik heb nu de volgende 2 pgSQL tabellen:

CREATE TABLE anime.user (
	id			serial				primary key,
	naam			varchar(16),
	wachtwoord		varchar(40),
	email			varchar(60),
	geactiveerd		boolean				default false,
	datum_aangemeld		date				default now(),
	ip_aangemeld		inet,
	laatst_online		date,
	laatst_ingelogt		date
);

CREATE TABLE anime.users_sessies (
	uid			integer,
	ip			inet,
	code			varchar(40),
	wanneer			date				default now()
);


Ik wil nu dat wanneer user.laatst_ingelogt word geupdate en de tijd daarvoor met de huidige tijd groter is als 3 minuten er in de tabel users_sessies een insert word gedaan...

Hoe zouw ik dit kunnen doen? Dus ik wil niet gewoon een insertje in een PHP bestand maar gewoon op de achtergrond wanneer user.laatst_ingelogt word geupdate.
Klaasjan Boven schreef op 02.05.2007 16:53
al naar gekeken?

Lijkt me trouwens echt een Frank of Remco vraag


Héé ja ik denk dat daar maar eens even naar ga kijken:) En inderdaad dit is echt een vraag voor hun:):P

[edit]Ik ga nu lekker patat eten:D het = namelijk patat dag:p[/edit]
En anders moet je je vraag eens hier stellen. Daar lopen ook een paar PL/SQL grootheden rond waaronder Frank en Remco
Oke ik ben daar doorverwezen naar de trigger functie...

Ik heb nu dus dit:

CREATE TRIGGER trig_inloggen AFTER UPDATE ON user EXECUTE PROCEDURE insert_sessie(id, ip_ingelogt);


Maar hoe zouw ik aan ip_ingelogt kunnen komen als ik bijvoorbeeld deze update query heb:


UPDATE user SET laatst_ingelogt = now() WHERE id = $id


En ja ik weet het de query zal wel fout zijn ofzo maar het is even als voorbeeld hoe ik de query uiteindelijk ga maken...
Ik heb nu een oplossing op het forum van PHPfreakz gekregen:

CREATE RULE insert_sessie AS ON UPDATE TO user

	WHERE AGE(old.laatst_online) > INTERVAL '3 MINUTE' DO ALSO

		INSERT INTO users_sessies (uid, ip, code) VALUES (id, ip, code);


Maar hoe zorg ik ervoor dat het ip adress en code ook in die insert terecht komen?
Kan je ze niet in een tijdelijke tabel zetten??

CREATE RULE insert_sessie AS ON UPDATE TO user

WHERE AGE(old.laatst_online) > INTERVAL '3 MINUTE' DO ALSO

INSERT INTO users_sessies SELECT id, ip , code from tijdelijke_tabel

DELETE FROM tijdelijke_tabel;

Zoiets??
@klaasjan dat is inderdaad wel wat maar hoe zit het dan als er tergelijk tijd meerdere leden inloggen? Wat gebeurd er dan allemaal met die tabel... Gaat dit dan wel allemaal goed?
Volgens mij moet dat met TRANSACTIONS

Zoek daar maar even op dan krijg je zeg maar dat een row gelockt wordt en er niet in geschreven kan worden. Maar je kan het toch gewoon proberen wat er gebeurt?
*Roept frank & Remco van Arkelen* ;)
Klaasjan Boven schreef op 02.05.2007 22:08
Volgens mij moet dat met TRANSACTIONS

Zoek daar maar even op dan krijg je zeg maar dat een row gelockt wordt en er niet in geschreven kan worden. Maar je kan het toch gewoon proberen wat er gebeurt?


Héé ja:) Zal ik morgen even naar kijken:p Ik heeft nu geen pit meer:p

Reageren