26. januar 2003 - 16:28
Der er
14 kommentarer og
1 løsning
¨Problemer med et par sætninger
Jeg har lige et par kompliserede mySQL sætninger, som jeg gerne vil have lidt hjælp til:
For at det er lidt nemmere at forstå hvad jeg skriver, så vil jeg lige beskrive de tre tabeller der bliver brugt:
Persons: Indeholder følgende felter: id, navn, gender
Picture: Indeholder følgende felter: picid, filename, pid (persons id)
votes: Indeholder følgende felter: picid, sessionid
1)
Den første sætning der volder mig problemer er en sætning, der vælger et tilfældigt picid fra tabellen picture, hvor følgende er gældende:
picid'et der bliver valgt må ikke optræde i tabellen votes sammen med et sessionid der er lig med det pågældende sessionsid (altså sessionid != '" & SessionID & "')
Der ud over skal det gælde at det picid der bliver valgt skal have gender lig med variablen strGender i tabellen persons
2)
Anden sætninger omhandler også lidt samme problematiok som ovenfor. Den startede således:
SELECT picture.*,((hits.vote1+hits.vote2+hits.vote3+hits.vote4+hits.vote5+hits.vote6+hits.vote7+hits.vote8+hits.vote9+hits.vote10) / hits.raters) AS score FROM picture INNER JOIN hits ON hits.picid=picture.picid WHERE persons.gender=" & strGender
Men den virker ikke helt, da SQL ikke helt forstår mig når jeg til sidst skriver "WHERE persons.gender=" & strGender" til sidst, da der er tale om en betingelse i en anden tabel.
Hvordan får jeg skrevet betingelsen ind så mySQL fatter det? :-)
Håber det er bare lidt forståligt det jeg skriver :-)
28. januar 2003 - 18:48
#14
Jeg fik for nogle dage siden følgende sql sætning her på eksperten, som dog ikke tager højde for strGender:
SELECT picture.picid FROM picture LEFT JOIN votes ON picture.picid != votes.picid WHERE sessionid ="& sessionid &" ORDER BY RAND() LIMIT 0, 1;
Den virker også fint, der er bare et problem, som jeg ikke kan gennemskue hvordan jeg løser. jeg prøver herunder at forklare det:
hvis du forestiller dig at picture og vote indeholder følgende:
picture:
picid,pid,filename,ip,datetime
3, 1, IMG_3057.jpg, 127.0.0.1, 2003-01-28 14:30:55
6, 1, IMG_3062.jpg, 127.0.0.1, 2003-01-28 15:07:19
5, 1, IMG_3807.jpg, 127.0.0.1, 2003-01-28 14:32:03
7, 1, IMG_3058.jpg, 127.0.0.1, 2003-01-28 15:07:28
votes:
id,sessionid, picid, ip, vote, datetime
11, 884168892, 5, 127.0.0.1, 5, 2003-01-28 17:24:15
2, 581581830, 3, 127.0.0.1, 7, 2003-01-28 15:03:40
3, 884168884, 7, 127.0.0.1, 9, 2003-01-28 15:52:23
10, 884168892, 3, 127.0.0.1, 6, 2003-01-28 17:13:34
9, 884168890, 3, 127.0.0.1, 8, 2003-01-28 17:11:26
6, 884168888, 3, 127.0.0.1, 7, 2003-01-28 17:01:09
7, 884168888, 7, 127.0.0.1, 9, 2003-01-28 17:01:17
8, 884168888, 5, 127.0.0.1, 5, 2003-01-28 17:01:22
Hvis jeg kører førnævnte sql sætning og fjerner limit og sætter sessionid = 884168892, får jeg følgende resultat:
picid
7
3
5
6
6
7
Som du kan se, piller den kun de to records ud hvor sessionid er lig 884168892, men planen var at den skulle pille alle forekomster af picid hvor sessionid = 884168892 ud, så resultatet kun var:
picid
7
6
6
7
og så skulle den gerne kun tage en af hver slags, så det idelle resultat er:
picid
6
7
Håber det bare gav lidt mening :-)