Avatar billede dta Nybegynder
10. januar 2007 - 14:12 Der er 26 kommentarer og
3 løsninger

Tricky forspørgsel

Jeg har en tabel (LOG) (USERID, HTYPE) med en 'LOG' over hvilke handlinger der er lavet på på hver record i tabel (USERS) (ID m.m.).

Jeg skal lave en forspørgsel der finder alle de records i USER hvor jeg IKKE har lavet en bestemt handling f.eks "MAIL SENT" som HTYPE i LOG. Men der kan eller kan ikke have været udført andre handlinger f.eks. "VELKOMST SENT" som HTYPE i LOG
Avatar billede dta Nybegynder
10. januar 2007 - 14:15 #1
MYSQL er 4.1
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:38 #2
SELECT * FROM USER
WHERE NOT id IN
(SELECT userid FROM LOG
WHERE HTYPE="VELKOMST SENT");
Avatar billede dta Nybegynder
10. januar 2007 - 14:42 #3
I wish! Virker ikke i denne vrsion af MYSQL
Avatar billede kalp Novice
10. januar 2007 - 14:43 #4
skal det ikke være

SELECT * FROM USER
WHERE id NOT IN
(SELECT userid FROM LOG
WHERE HTYPE="VELKOMST SENT");
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:44 #5
kalp:  begge dele burde virke

dta:  kan være 4.1 ikke understøtter sub-selects....  så bliver det lidt mere tricky ... :-/
Avatar billede dta Nybegynder
10. januar 2007 - 14:46 #6
Det er derfor jeg indsætte max point!
Avatar billede kalp Novice
10. januar 2007 - 14:46 #7
hvad med denne (hvis jeg tænker korrekt)  og ja hvilken version af mysql er det.?

SELECT * FROM USER
WHERE id IN
(SELECT userid FROM LOG
WHERE HTYPE <> "VELKOMST SENT");
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:47 #8
hvad med noget lign. :

SELECT u.*
FROM user u
LEFT OUTER JOIN LOG l ON l.userid=u.id AND l.htype="VELKOMST SENT"
WHERE l.htype IS NULL
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:52 #9
kalp: vil det ikke bare give brugere, som har andre log-forekomster end VELKOMST SENT, men ikke nødvendigvis bruger som ikke har nogen VELKOMST SENT ?
Avatar billede dta Nybegynder
10. januar 2007 - 14:53 #10
OK i den rigtige retning men:

Jeg er efter de ID hvor der IKKE tester positivet på l.htype="VELKOMST SENT"

Altså hvis der findes en record i LOG med HTYPE ="VELKOMST SENT" så skal det ID ikke være i listen.

Problemet er at der kunne være en anden handling.
Avatar billede kalp Novice
10. januar 2007 - 14:55 #11
SELECT info.* FROM USER info, Log log WHERE log.id = info.id AND log.HTYPE <> 'VELKOMST SENT'
Avatar billede kalp Novice
10. januar 2007 - 14:56 #12
Kommentar: fsconsult.dk
10/01-2007 14:52:14

Ved det ikke... den der inder select laver jo en liste over alle der ikke har lavet den der handling.. så den burde vel virke?
hvis altså hans mysql understøtter den
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:58 #13
kalp: nej, den laver en liste over folk der har lavet andre handlinger..

dta:  prøvede du den med left outer join?
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 14:59 #14
4.1 burde da ellers understøtte subselects ... ?
Avatar billede kalp Novice
10. januar 2007 - 14:59 #15
fsconsult.dk >> ja? og det er vel det han spørger efter!

læg mærke til at jeg blot skriver where id IN og ikke NOT IN  !
Avatar billede sw_red_6 Nybegynder
10. januar 2007 - 15:00 #16
i følge den her side så skulle mysql 4.1 kunne bruge subqueries. http://dev.mysql.com/tech-resources/articles/4.1/subqueries.html
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 15:02 #17
kalp: nej, han spørger jo efter folk som IKKE har lavet den handling ...  det er ikke helt det samme ;-)

spørgsmålet er om subselects virker på hans MySQL eller ej ...  det gør alverden til forskel ...
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 15:03 #18
dta:  hvad får du af fejl, hvis du kører:

SELECT * FROM USER
WHERE NOT id IN
(SELECT userid FROM LOG
WHERE HTYPE="VELKOMST SENT");
Avatar billede dta Nybegynder
10. januar 2007 - 15:04 #19
My bad! Det er 4.0.26 forsøger at få den opgraderet da de har nyere versioner, i stedet for at prøve at løse denne Tak for hjælpen!
Avatar billede dta Nybegynder
10. januar 2007 - 15:05 #20
kalp smid et svar så deler jeg pointene!
Avatar billede kalp Novice
10. januar 2007 - 15:05 #21
dta >> super;)


fsconsult.dk >>

Denne sql

SELECT * FROM USER
WHERE id IN
(SELECT userid FROM LOG
WHERE HTYPE <> 'VELKOMST SENT');


brugt på denne data

id 1 : htype 'VELKOMST SENT'
id 2 : htype 'VELKOMST SENT'
id 3 : htype 'noget andet'
id 4 : htype 'VELKOMST SENT'


burde returnere

1,2 og 4


Den der sub select indeholder jo kun id 3!!
Avatar billede kalp Novice
10. januar 2007 - 15:06 #22
sorry.. mener den indeholder jo 1,2 og 4 og IKKE 3!
Avatar billede kalp Novice
10. januar 2007 - 15:07 #23
ahh... I get it
Avatar billede kalp Novice
10. januar 2007 - 15:09 #24
nej.. jeg har sgu ret i det jeg siger..

nåh.. never mind.. problemet blev løst..
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 15:09 #25
kalp:
hvad med
id 1 : htype 'VELKOMST SENT'
id 2 : htype 'VELKOMST SENT'
id 2 : htype 'JULEMAND'
id 3 : htype 'noget andet'
id 4 : htype 'VELKOMST SENT'

vil så give både 2 og 3 ...  ikke ?
Avatar billede kalp Novice
10. januar 2007 - 15:13 #26
fsconsult.dk >> der er 2 ja?

du overser ikke at jeg skriver WHERE id IN
og ikke WHERE id NOT IN

?
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 15:15 #27
nej, men den finder jo id=2 og htype="JULEMAND", selvom id 2 har en "VELKOMST SENT" også ...  var bare min pointe ;-)    men lad det ligge ...
Avatar billede kalp Novice
10. januar 2007 - 15:17 #28
jeg går da ud fra at id er unikt.... troede det var en fejl at du skrev 2 ud for den.

burde vel se sådan ud

id 1 : htype 'VELKOMST SENT'
id 2 : htype 'VELKOMST SENT'
id 3 : htype 'JULEMAND'
id 4 : htype 'noget andet'
id 5 : htype 'VELKOMST SENT'


men fair nok.. lad det ligge
Avatar billede fsconsult.dk Nybegynder
10. januar 2007 - 15:18 #29
formoder at user-id er unikt i USER, men ikke i LOG ..  men tak for diskussionen ;-)
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