Avatar billede dsj Nybegynder
23. juli 2003 - 11:52 Der er 9 kommentarer og
2 løsninger

Hvordan laver man dette i SQL

Hvordan laver jeg dette om til korrekt SQL :)

user_t:
--------------------
int user_id
datetime lastlogin
int point


UPDATE user_t SET
(hvis lastlogin = i dag) point = point+10,
lastlogin = now()
WHERE user_id = 12;
Avatar billede dsj Nybegynder
23. juli 2003 - 11:58 #1
'point' skal altså kun opdateres, hvis klientens sidste login var i dag.
Avatar billede genvej Nybegynder
23. juli 2003 - 11:59 #2
update user_t set
point=point+10, lastlogin=sysdate where user_id=12 and (lastlogin-sysdate)<1
Avatar billede dsj Nybegynder
23. juli 2003 - 12:04 #3
Nej, den dur ikke. 'lastlogin' skal opdateres under alle omstændigheder, men 'point' kun hvis lastlogin før opdateringen var i dag.
Avatar billede jinxit Nybegynder
23. juli 2003 - 12:05 #4
Burde det ikke være omvendt (sysdate-lastlogin)<1
Avatar billede dsj Nybegynder
23. juli 2003 - 12:05 #5
Og det skal være i samme statement...
Avatar billede jinxit Nybegynder
23. juli 2003 - 12:06 #6
Så skal du lave 2 update queries
Avatar billede dsj Nybegynder
23. juli 2003 - 12:06 #7
nej, man kan lave if-sætninger i sql'en, men jeg ved ikke hvordan det præcis skal laves.
Avatar billede jinxit Nybegynder
23. juli 2003 - 12:10 #8
update user_t set
point=IF((sysdate-lastlogin)<1,point+10,point), lastlogin=sysdate where user_id=12
Avatar billede jinxit Nybegynder
23. juli 2003 - 12:12 #9
En if sætning kan kun returnere en tekststreng eller et tal og kan derfor ikke indeholde SQL statements... bare en lille reminder
Avatar billede dsj Nybegynder
23. juli 2003 - 12:37 #10
Den med if-sætningen holder, men ikke sammenligningen af datoer. Der er ikke noget i MySQL der hedder sysdate og now()-lastlogin returnerer vidst ikke forskellen i hele dage.
Avatar billede dsj Nybegynder
23. juli 2003 - 13:01 #11
Her er løsningen:

UPDATE user_t SET point = IF( (TO_DAYS(now()) - TO_DAYS(lastlogin))=0, point +10, point ), lastLogin = now() WHERE user_id = 12;

Så fandt jeg ud af, at det hedder sysdate(), da det jo er en funktion :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester