Avatar billede lojmann Nybegynder
22. juli 2004 - 12:53 Der er 14 kommentarer og
1 løsning

Hente random SQL entry ud som ikke findes som referance

Hej,

Jeg har to tabeller. tabelA og tabelB.

Lad os sige de indeholder flg;
tabelA;
navn
aid
pid

tabelB;
aid
pid

Jeg skal nu hente et random entry ud fra tabelA men kun entry fra tabelA hvor der IKKE findes en referance til i, i tabelB.

tabelA entry: (navn - aid - pid)
thomas - 8 - 1
jens - 21 - 2

tabelB entry: (aid - pid)
8 - 1
56 - 45

Dvs. random sætning må ikke hente "thomas" ud men "jens" må de gerne...

Hvordan får jeg lige det udtrykt i PHP/SQL? Jeg har tænkt den halve nat og nu forsøger jeg her...

Håber det giver mening, ellers lad mig vide det!

Nogle der kan hjælpe?
/løjmann
Avatar billede chries Nybegynder
22. juli 2004 - 13:04 #1
Aner ikke om dette virker =)

SELECT A.navn, A.pid, A.aid FROM A, B WHERE (A.pid <> B.pid) AND (A.aid <> B.aid) ORDER BY RAND();
Avatar billede lojmann Nybegynder
22. juli 2004 - 13:20 #2
Ser ikke sådan ud, har fjernet AND (.....) det er vidst ikke nødvendig med den. Men den selecter intet. Pt. er tabelB tom og der er entry i tabelA, så derfor skal den selecte noget jo, men det gør den ikke...
Avatar billede chries Nybegynder
22. juli 2004 - 13:25 #3
der det kun aid der skal være forskellig, eller er det begge ?
Avatar billede chries Nybegynder
22. juli 2004 - 13:31 #4
Nyt gæt :)
SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid AMD A.pid=B.pid WHERE aid IS NULL AND pid IS NULL
Avatar billede lojmann Nybegynder
22. juli 2004 - 13:31 #5
det er bare aid som ikke må findes i tabelB
Avatar billede chries Nybegynder
22. juli 2004 - 13:32 #6
SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid WHERE aid IS NULL
Avatar billede chries Nybegynder
22. juli 2004 - 13:32 #7
SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid WHERE aid IS NULL ORDER BY RAND()
Avatar billede chries Nybegynder
22. juli 2004 - 13:32 #8
SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid WHERE aid IS NULL ORDER BY RAND() LIMIT 1
Avatar billede lojmann Nybegynder
22. juli 2004 - 13:36 #9
Tror den er der, sidste SQL skulle bare lige skrives lidt om... Skal lige teste så flyver der point bag efter :)
Avatar billede lojmann Nybegynder
22. juli 2004 - 13:57 #10
No virker ikke.

Det som jeg er ved at lave er noget vote noget. Når man stemmer kommer der et entry ind i tabelB med sit profil id og spørgsmålets id.
Når man så vil stemme igen, så skal den tage et tilfældigt entry i tabelA som der ikke er en referance til i tabelB.
Avatar billede lojmann Nybegynder
22. juli 2004 - 14:22 #11
Jeg har nu denne sql query, men den virker ikke som jeg godt kunne tænke mig det :)

SELECT *
FROM sites
JOIN votes USING (sid)
WHERE (votes.sid <> sites.sid)
AND (votes.pid = '$pid')
ORDER BY RAND() LIMIT 0,1

Den bliver ved med ikke at selecte noget...
Avatar billede jakoba Nybegynder
22. juli 2004 - 16:20 #12
den er god nok:
SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid WHERE aid IS NULL ORDER BY RAND() LIMIT 1
det er blot i WHERE delen du skal huske at fortælle det er B's aid der skal være NULL

SELECT A.navn, A.pid, A.aid FROM A LEFT JOIN B ON A.aid=B.aid WHERE B.aid IS NULL ORDER BY RAND() LIMIT 1
Avatar billede lojmann Nybegynder
22. juli 2004 - 19:08 #13
Vi er der næsten, jakoba har ret - og den henter også kun sider ud som ikke findes som reference på aid. Den skal dog både sammenligne aid og pid. pid er en variabel jeg har i min session så den skal ikke hentes fra databasen. Det kan jeg i mellemtiden ikke få den til???
Avatar billede lojmann Nybegynder
02. marts 2005 - 13:35 #14
chrise og jakoba - hvis i svare så deler jeg point ud. Fandt en løsning (mener jeg!)
Avatar billede lojmann Nybegynder
18. maj 2005 - 15:04 #15
lukker!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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