Dem med * er dem der sammenlignes i inner join. Jeg vil så bruge distinct til at finde alle unikke gProduct_id's (wallpapers) og derefter skal de tilbage værende sorteres efter gAdded, derefter skal jeg så finde de 10 sidste produkter der er blevet tilføjet wallpapers til (altså dem jeg har distinct). Hvordan gøres dette da jeg ikke kan bruge distinct og top10 i samme select ???
SELECT wallpapers.*, products.* FROM wallpapers INNER JOIN products ON wallpapers.gProduct_id = products.pID WHERE products.pCover=true order by wallpapers.gAdded desc
hej hej, prøv at anvende UNION istedet, så kan du tage distinct i den ene tabel og lave en count på den anden. Altså recordset sammenlignes ved syntaksen:
(SELECT blabla FROM blabla WHERE blabla) UNION (SELECT blabla2 FROM bla2 WHERE bla3)
Held og lykke.
Synes godt om
Slettet bruger
09. april 2006 - 13:52#2
Jeg tror ikke jeg gør det helt rigtigt for som koden ser ud nu får jeg følgende fejl:
Microsoft JET Database Engine (0x80040E14) Antallet af kolonner i de to markerede tabeller eller forespørgsler i en foreningsforespørgsel stemmer ikke overens.
Og sådan her ser koden ud:
strSQL = "(SELECT DISTINCT(gProduct_id) FROM wallpapers) UNION (SELECT TOP 10 * FROM products WHERE pCover=true)"
Men da jeg ikke bruger inner join så kan jeg heller ikke sortere top 10 efter gAdded, hvad skal jeg så gøre ?
Det vil sige du i Wallpapers har flere poster hvor gProduct_id er ens. Problemet er hvis man laver distinct på gProduct_id så ved man jo ikke hvilken gAdded man skal tage da den sikker ikke er ens for de gProduct_id som findes. Så hvilken gAdded hvade du tænkt på?
Synes godt om
Slettet bruger
09. april 2006 - 20:55#4
Ja wallpapers har flere poster hvor gProduct_id er ens. Men jeg kan godt beskrive det jeg vil gøre på en lidt anden måde.
Jeg vil have at den finder de sidste 10 produkter der er tilføjet wallpapers til uanset hvor mange billeder der er tilføjet til det enkelte produkt.
Wallpaper tabellen er opbygget sådan at: gID : Er et autonummer. gProduct_id : Er et produkt der findes i "products"-tabellen. (derfor kan dette nr findes flere steder i tabellen) gAdded : Er den dato hvor billedet er tilføjet til db'en.
Det du gerne vil havde må være dette eller noget i den stil :) (som jeg læser det)
select top 10 pDanish_title, pCategory, pCover, gProduct_id, Max(gAdded) AS agAdded from Products inner join wallpaper on Products.pID = wallpaper.gProduct_id group by pDanish_title, pCategory, pCover, gProduct_id order by max(gadded) desc
Synes godt om
Slettet bruger
09. april 2006 - 22:51#8
Jeg tror du har misforstået det lidt... Jeg skal hente de sidste ti produkter der er tilføjet wallpapers til og så kun udskrive de ti. Det eneste jeg skal bruge products-tabellen til er til at få navnet på produktet da det ikke står i wallpapers-tabellen.
Hvad det angår den kode du gav så virker den ikke helt, for den distincter product_id og viser alle produkter der er tilføjet wallpapers til og ikke kun en top 10...
Skal du kun bruge navnet på produktet for så kan den sidste laves lidt kortere?
Hvis den tager mere end 10 lyder det som om gAdded er ens for alle posterne men så kan den også sortere på pID:
select top 10 pID, pDanish_title, pCategory, pCover, Max(gAdded) from Products inner join wallpaper on Products.pID = wallpaper.gProduct_id group by pID, pDanish_title, pCategory, pCover order by max(gAdded) desc, pID
Synes godt om
Slettet bruger
09. april 2006 - 23:05#10
Har lige testet din anden kode, og det den gør er at den finder de sidste 10 datoer og alle produkter i de dage, og det vil sige at der vil kunne blive 100 produkter hvis det er. Den skulle meget gerne kunne finde de sidste 10 produkter også selv om det er fra forskellige dage...
Er det ikke rigtigt at det er gProduct_id og pID som skal joins?
Synes godt om
Slettet bruger
09. april 2006 - 23:12#13
gAdded er et dato-felt (der skrives dato uden til 01-01-2006)
Okay nu nærmer vi os, den sidste kode udskriver nu kun 10 poster, men det er kun den første post der passer, resten er de første produkter i min produkt-tabel (1-2-3 osv)
Synes godt om
Slettet bruger
09. april 2006 - 23:18#14
Jo det er gProduct_id og pID som skal joins. Og det er så wallpapers der er "hoved"-tabellen og products skal kun bruges til at hente info som pCover og pDanish_title.
ok så forstår jeg ikke hvorfor den ikke gør det rigtigt.
Den skulle gerne finde det nyeste billede for hver produkt med max(gAdded) og når de to så er joinet skulle den finde navn på produktet..
du kan prøve denne hvor join ledet er vendt men det vil næppe give noget bedre da det er inner join som bruges:
select top 10 pID, pDanish_title, pCategory, pCover, Max(gAdded) from wallpaper inner join Products on wallpaper.gProduct_id = Products.pID group by pID, pDanish_title, pCategory, pCover order by max(gAdded) desc, pID
Synes godt om
Slettet bruger
09. april 2006 - 23:41#18
Der er ingen forskel uanset hvilken af de to koder jeg bruger....
Den udskriver 177,1,2,3,4,6,7,8,9,10
Den rigtige udskrift skulle være 177,58,85,86,84,83,93,92,33,52
Er der nogle ting feks min database eller noget jeg kan vise dig, så du måske kan se fejlen ?
Du kan prøve denne i stedet for max(gAdded) bruger den max(gID) umiddelbart vil det nyeste billede også havde størst gID, og se om det giver det samme?
select top 10 pID, pDanish_title, pCategory, pCover, Max(gId) as a from wallpaper inner join Products on wallpaper.gProduct_id = Products.pID group by pID, pDanish_title, pCategory, pCover order by max(gId) desc, pID
Synes godt om
Slettet bruger
09. april 2006 - 23:52#20
Der var den jo.....Nu bliver de udskrevet fuldstændig som de står i databasen.
Så hvis du vil lægge et svar så får du de 60 point plus lidt ekstra (hvis jeg ellers kan finde ud af det), og så skal der lyde et stort TAK herfra :)
men jeg vil tilføje at det brugte også virke med max(gAdded)... Det skulle umiddelbart give det samme, kan det være du har skiftet dato format på et tidspunkt??
men det med gId skulle virke lige så godt så længe højst gId svare til højst dato.
Synes godt om
Slettet bruger
10. april 2006 - 00:11#23
gID vil altid være højest sammen med datoen, og hvis der skulle være forskel, så vil det højest dreje sig om sekunder og så vil produkterne jo højest sansynligt vises alligevel... gAdded skal sådan set også kun fortælle hvornår billedet blev uploaded og om det så er fortidligt at evt. slette det.
PS. Kunne sq ikke finde ud af give flere point, så håber du kan nøjes med 60 ;)
Det heller ikke helt logisk men til info så gør man det via den menu boks som hedder "Funktioner" der er et link som hedder "Afsæt flere point" som kun er der hvis man har oprettet spørgsmålet og det stadig er åbent.
Synes godt om
Ny brugerNybegynder
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.