Avatar billede axkris Nybegynder
14. september 2005 - 13:49 Der er 15 kommentarer og
1 løsning

En simpel subselect, som ikke dur

Hej alle

Jeg skal have mig et script, som kan udskrive en liste over medlemmer, som har mere end en profil. Det gør jeg ved at sammenligne ip'erne.

Dog virker min subselect ikke, og den kommer med en masse fejl.

Kan en af jer udbygge min script, så det kommer til at virke?

SELECT member_id, COUNT
(SELECT member_id
FROM forum_members
WHERE m_ip IN
(SELECT m_ip
FROM forum_members)) AS counter
FROM forum_members
WHERE counter > 1
Avatar billede capaj Nybegynder
14. september 2005 - 13:58 #1
SELECT member_id, COUNT(*)
FROM forum_members
Group by member_id
Having Count(*)>1
Avatar billede axkris Nybegynder
14. september 2005 - 14:03 #2
Ingen fejl, men heller intet output (intet blev fundet, selvom mange brugere har flere profiler).
Avatar billede axkris Nybegynder
14. september 2005 - 14:05 #3
Men hov, du bruger jo heller ikke "m_ip"-værdien. Den skal bruges :-)
Avatar billede kelo Nybegynder
14. september 2005 - 14:10 #4
SELECT member_id, m_ip, COUNT(*)
FROM forum_members
Group by member_id, m_ip
Having Count(*)>1
Avatar billede axkris Nybegynder
14. september 2005 - 14:47 #5
I forstår mig ikke :-) Den skal ind og finde de brugerne som har mere end end profil.

Så vi skal på en eller anden måde have indsat følgende i sætningen:

SELECT member_id
FROM forum_members
WHERE m_ip IN
(SELECT m_ip
FROM forum_members) AS counter

Det er denne, som skal tælles, også det værdien returneres samme med memberid.

Pointen er, at jeg skal kunne se en listen over de brugerid'er, hvor den samme IP-adresse forekommer mere end en gang.
Avatar billede axkris Nybegynder
14. september 2005 - 14:51 #6
Vi skal nok nærmere skrive noget ala (dog fejler den også ved select'en):

SELECT MEMBER_ID
FROM FORUM_MEMBERS
GROUP BY MEMBER_ID
HAVING (COUNT
(SELECT member_id
FROM forum_members
WHERE M_ip IN
(SELECT M_ip
FROM forum_members)) > 1)
Avatar billede capaj Nybegynder
14. september 2005 - 15:31 #7
Distinct er nok det du leder efter:



Create table FORUM_MEMBERS
(
    UserId varchar(3),
    m_ip varchar(20),
   
)

insert Forum_members values ('A','1.1.1.1')
insert Forum_members values ('A','1.1.1.1')
insert Forum_members values ('A','1.1.1.1')
insert Forum_members values ('A','1.1.1.2')
insert Forum_members values ('A','1.1.1.3')
insert Forum_members values ('B','1.1.1.4')
insert Forum_members values ('B','1.1.1.4')
insert Forum_members values ('C','1.1.1.5')
insert Forum_members values ('C','1.1.1.5')
insert Forum_members values ('C','1.1.1.5')


SELECT userid, COUNT (distinct m_ip)
FROM forum_members
Group by userid
Having COUNT (distinct m_ip)>1


drop table Forum_members
Avatar billede axkris Nybegynder
14. september 2005 - 15:41 #8
Takker, men når jeg omsætter det til mit eget system, så spytter den ikke noget ud (den fejler heller ikke):

SELECT MEMBER_ID, COUNT(DISTINCT M_IP) AS Expr1
FROM FORUM_MEMBERS
GROUP BY MEMBER_ID
HAVING (COUNT(DISTINCT M_IP) > 1)

Hvorfor ikke?
Avatar billede capaj Nybegynder
14. september 2005 - 16:26 #9
Du er sikker på du har flere m_ip pr member_id?
Avatar billede axkris Nybegynder
14. september 2005 - 16:39 #10
Der er kun en "M_ip" pr. brugerprofil (FORUM_MEMBERS), men nogle mennesker opretter flere profiler og dem vil jeg gerne finde (ved at finde sammenfaldende ip'er).
Avatar billede capaj Nybegynder
14. september 2005 - 16:50 #11
Dette select statement:
SELECT MEMBER_ID, COUNT(DISTINCT M_IP) AS Expr1
FROM FORUM_MEMBERS
GROUP BY MEMBER_ID
HAVING (COUNT(DISTINCT M_IP) > 1)

Giver dig alle Member_id's som har mere end én m_ip.

For at svare på dit sidste spørgsmål skal du have alle de ip adresser hvor der er flere forskellige member_id:

SELECT MMBER_ID, COUNT(DISTINCT M_IP) AS Expr1
FROM FORUM_MEMBERS
GROUP BY MEMBER_ID
HAVING (COUNT(DISTINCT M_IP) > 1)


Måske det er dette du mener:

Create table FORUM_MEMBERS
(
    UserId varchar(3),
    m_ip varchar(20),
   
)

insert Forum_members values ('A','1.1.1.1')
insert Forum_members values ('B','1.1.1.1')
insert Forum_members values ('C','1.1.1.1')
insert Forum_members values ('D','1.1.1.3')
insert Forum_members values ('E','1.1.1.4')


Select userid from forum_members
where m_ip in
(SELECT m_ip
    FROM forum_members
    Group by m_ip
    Having COUNT (distinct userid)>1
)
drop table forum_members
Avatar billede capaj Nybegynder
14. september 2005 - 16:51 #12
Sorry - fejl i kopieringen:
Prøv denne:
Create table FORUM_MEMBERS
(
    UserId varchar(3),
    m_ip varchar(20),
   
)

insert Forum_members values ('A','1.1.1.1')
insert Forum_members values ('B','1.1.1.1')
insert Forum_members values ('C','1.1.1.1')
insert Forum_members values ('D','1.1.1.3')
insert Forum_members values ('E','1.1.1.4')


Select userid from forum_members
where m_ip in
(SELECT m_ip
    FROM forum_members
    Group by m_ip
    Having COUNT (distinct userid)>1
)
drop table forum_members
Avatar billede ldanielsen Nybegynder
14. september 2005 - 20:57 #13
Dette vil virke:

SELECT m_ip, COUNT(*)
FROM forum_members GROUP BY m_ip HAVING COUNT(*) > 1

Det giver dig en liste over IP'er der findes mere end én gang, samt antallet af forekomster.

Hvis du siger at du skal bruge member_id for dem der har flere profiler, så lave du den til en "sub":

SELECT member_id FROM forum_members WHERE m_ip IN
(SELECT m_ip FROM forum_members GROUP BY m_ip HAVING COUNT(*) > 1)
Avatar billede axkris Nybegynder
15. september 2005 - 12:32 #14
ldanielsen det var lige det, som jeg skulle bruge.

Tryk svar alle :-) og takker for hjælpen.
Avatar billede ldanielsen Nybegynder
15. september 2005 - 14:23 #15
Svar
Avatar billede axkris Nybegynder
17. september 2005 - 11:56 #16
capaj tryk også svar :-)
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