21. januar 2003 - 15:07Der 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 :-)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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.
Synes godt om
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.
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.
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.