Avatar billede jacobchr Nybegynder
13. november 2004 - 14:53 Der er 8 kommentarer og
1 løsning

relation eller sub-select ?

Jeg har en tabel med produkter og en der indeholder en log over hvornår disse er blevet vist.

I log tabelen logges tidspunkt, produkt_id, nu er det sådanne at jeg gerne vil have at et produkt kun må vises 10 gange på en dag, hvordan gør jeg det nemmeste ?
Avatar billede tofte Juniormester
13. november 2004 - 15:08 #1
Har to tabeller
Produkt som indeholder id og produkt
og log som indeholder id, produkt(tal-relation med produkt.id), vist(angiver dato for visning)

SELECT produkt.produkt
FROM produkt INNER JOIN log ON produkt.id=log.produkt
GROUP BY produkt.produkt
HAVING Count(log.id)<=10;
Avatar billede jacobchr Nybegynder
13. november 2004 - 15:12 #2
Vil den også virke, hvis der ikke er noget i log-tabelen ? altså produkt.id=log.produkt ikke er opfyldt
Avatar billede tofte Juniormester
13. november 2004 - 15:16 #3
Øjeblik, der er lige en lille fejl. Den viser alle som ikke har mindre end ti loghændelser, men du vil jo have den så den viser alle som har mindre end ti log hændelser i dag.
Avatar billede tofte Juniormester
13. november 2004 - 15:27 #4
Det skal vist være
SELECT produkt.produkt, log.vist
FROM produkt LEFT JOIN log ON produkt.id=log.produkt
GROUP BY produkt.produkt, log.vist
HAVING Count(log.id)<=10;
istedet. Men jeg kan ikke lige løse dit problem hvis det skal være hændelser i dag. Så jeg må sige, at jeg var lidt for hurtig til at svare. Håber der er en anden der har en løsning.
Avatar billede tofte Juniormester
13. november 2004 - 16:47 #5
Så burde det virke
SELECT * FROM produkt WHERE id NOT IN (SELECT produkt.id
FROM produkt LEFT JOIN log ON produkt.id=log.produkt
GROUP BY produkt.produkt, produkt.id, log.vist
HAVING (((log.vist)=Date()) AND ((Count(log.id))>9)));
Avatar billede jacobchr Nybegynder
15. november 2004 - 20:44 #6
mange tak for dine svar, men kan det passe at mysql har nogen problemmer med sub-select ? da jeg ikke kan få den der NOT IN til at virke.
Avatar billede tofte Juniormester
15. november 2004 - 21:36 #7
Ja, det er vist rigtigt. Det er først i 4.1 det virker, prøv følgende istedet. Har ikke testet det på en MySQL men det burde virke:
SELECT produkt.produkt FROM produkt LEFT JOIN log ON produkt.id=log.produkt GROUP BY produkt.produkt, produkt.id, log.vist HAVING NOT (((log.vist)=Date()) AND ((Count(log.id))>9));
Avatar billede tofte Juniormester
06. december 2004 - 19:11 #8
tak for points, fik du det til at virke?
Avatar billede jacobchr Nybegynder
06. december 2004 - 19:28 #9
Var så lidt ... nej det virkede ikke helt men lavede mit projekt om, så jeg fandt en anden løsning. Takker for hjælpen.
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