Avatar billede encorez Nybegynder
13. april 2009 - 21:01 Der er 8 kommentarer og
1 løsning

Avanceret udtræk

Hej

Jeg har en TABLE med en log med følgende felter og data som eksempel:

id  handling  IP      Session_id
1  TØJ      1.2.3.4  gb3567jd
2  DYR                gb3567jd
3  LEGO              gb3567jd
4  DYR      6.7.4.2  jsafh723
5  TØJ                jsafh723

Håber I kan følge mit eksempel. Jeg gemmer altså et session ID for hver log-entry, men gemmer kun IP adressen og nogle andre ting ved den første.

Tricket kommer så ved om jeg kan lave en forespørgsel på at få udtrækket alle rækker med nogle parametre MEN hvor session_id'et IKKE har en bestemt tilhørende IP.
Jeg vil f.eks. udtrække alle rækker med DYR, men vil ikke have dem fra IP 1.2.3.4.

Kan man lave noget acvanceret SQL der kan det?
Avatar billede jantzen88 Nybegynder
13. april 2009 - 21:28 #1
WHERE handling = 'DYR' AND ip != '1.2.3.4'

Husk du kan bruge AND og OR :)

Og så googlet jeg lige dit spg. og på 1min fandt jeg det her

SELECT * from table where NOT category = 'ignored category';
SELECT * from table where category != 'ignored category';
SELECT * from table where category <> 'ignored category';
SELECT * from table where category NOT LIKE 'ignored category';
Avatar billede encorez Nybegynder
13. april 2009 - 23:15 #2
Den første vil da ikke virke. WHERE handling = 'DYR' AND ip != '1.2.3.4'. Her vil jeg jo får nr 2 med, men det vil jeg jo ikke have da dens session_id er samme session_id som række nr 1 som har den IP jeg ikke vil have talt med.
Håber du kan følge mig.
Udtrækket skal indeholde række 4 OG IKKE række 2.

Jeg forstår simpelthen ikke hvordan de 4 select sætninger du har fundet skulle hjælpe. Kan du forklare hvordan de skulle hjælpe mit problem?
Avatar billede TorbenF Nybegynder
13. april 2009 - 23:35 #3
Det er ikke sikkert den er spot-on, men jeg tror følgende nested select kan løse problemet.

Select * from table where handling = "TØJ" and not in (select * from table where IP = "1.2.3.4")

Min tankegang er som følger:

Først løses den indre select statement, og her finder den alle de rækker, hvor IP er lig med "1,2,3,4". Det vil i dette tilfælde sige id 1,2 og 3. Disse rækker udelukkes med "not in". 

Herefter løses den ydre select, hvor vi vælger alle handlinger der er = "TØJ".
Avatar billede TorbenF Nybegynder
13. april 2009 - 23:50 #4
Hov, bare se bort fra ovenstående, det holder slet ikke.
Avatar billede encorez Nybegynder
13. april 2009 - 23:55 #5
hehe, ærgeligt. Men jeg forestiller mig måske også noget i retning af 2 queryes i én på en eller anden måde. Aner bare ikke hvordan det skal sammensættes hvis det overhovedet kan lade sig gøre.
Avatar billede TorbenF Nybegynder
14. april 2009 - 00:02 #6
select * from table where handling = "TØJ" and Session_id not in (select Session_id from table where IP = "1.2.3.4")

Har lige testet den og det ser ud til at virke. :)
Avatar billede encorez Nybegynder
17. april 2009 - 10:16 #7
Det virker sgu :)  Sådan en select har jeg tidligere har brug for. Super :)

Det ser ud til jeg er kommet til at give dette spørgsmål 0 point :(  det burde nærmest ikke kunne lade sig gøre.

Kan jeg lave et nyt spørgsmål til dig Torben du kan svare på :)
Avatar billede TorbenF Nybegynder
17. april 2009 - 21:40 #8
Det ville da være dejligt! :)
Avatar billede encorez Nybegynder
20. april 2009 - 12:46 #9
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