Avatar billede moejensen Nybegynder
21. januar 2003 - 15:07 Der er 5 kommentarer og
1 løsning

hjælp til SELECT statement

Jeg har en database med nedenstående to tabeller, udfra de tabeller skal  jeg have lavet en SQL sætning, der finder et tilfældigt id fra tabellen persons, men hvor det samtidig gælder at
der i tabellen votes ikke må være nogle forekomster hvor random id'et er lig med pid og optræder i række sammen med sessionid='" & SessionID & "'.


TABLE persons
    id int(6) NOT NULL auto_increment,
    name varchar(100),
   
TABLE votes
    id int(11) NOT NULL auto_increment,
    sessionid varchar(20),
    pid int(6),
    ip varchar(15),
    vote tinyint(1),
    datetime datetime,
    PRIMARY KEY (id)

Jeg ved godt at det lyder lidt kryptisk, så skriv hvis det er helt uforståeligt :-)
Avatar billede Slettet bruger
21. januar 2003 - 15:15 #1
SELECT id FROM persons LEFT JOIN votes ON persons.id = votes.pid WHERE pid IS NULL AND sessionid = '$sessionid' ORDER BY RAND() LIMIT 1

Noget i den dur.
Avatar billede Slettet bruger
21. januar 2003 - 15:16 #2
SELECT persons.id

(ikke kun id)
Avatar billede moejensen Nybegynder
21. januar 2003 - 16:20 #3
Den virker ikke helt som jeg havde tiltænkt den, den skal gøre lidt det modsatte af hvad den du har skrevet gør.

DVS. som sætningen er i øjeblikket er det et krav at sessionid = '$sessionid'  for at id'et kan blive udvalgt, men det skal være lige omvendt, så sessionid ikke er lig med '$sessionid' for at id' kan bliver valgt.
Avatar billede Slettet bruger
21. januar 2003 - 16:57 #4
SELECT persons.id FROM persons LEFT JOIN votes ON persons.id = votes.pid WHERE sessionid != '$sessionid' ORDER BY RAND() LIMIT 0, 1

- Måske er det bare det du mener. Her finder vi én tilfældig person (id) fra tabellen persons, som ikke har en række med sit pid i votes tabellen hvor sessionid = '$sessionid'.

Har personen slet ingen rækker (pids) i votes, kan han stadig udvælges. Ønsker du ikke dette:

SELECT persons.id FROM persons, votes WHERE persons.id = votes.pid AND sessionid != '$sessionid' ORDER BY RAND() LIMIT 0, 1

Her kan personen kun udvælges såfrem han også har en række med sit pid i votes hvor sessionid != $sessionid.
Avatar billede moejensen Nybegynder
21. januar 2003 - 18:06 #5
Der virker ikke, når jeg læder SQL sætningen, virker det meget logisk at det skulle virke, men jeg får stadig person.id'er ud, hvor der er en record i votes, det indeholder det pågældende session id og pid.

Er det muligt at lave en SQL sætning, der finder alle forekomster i votes hvor sessionid != '" & SessionID & "', og derefter finde alle person.id'er i tabellen persons - Herefetr skal de to indsamlede mængder sammenholdes, og der skal derefter udvælges et tilfældigt persons.id udaf den mængde der ligger unden for resultatet fra votes.

Giver det nogen mening? :-)
Avatar billede moejensen Nybegynder
28. januar 2003 - 12:41 #6
har du ikke lyst til at kigge med på den her:

http://exp.dk/spm/309815

det er lidt en udbygning af det her spg :-)
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