Oprettet fre. d. 27. august 2010 kl. 09:31:47

torotune
torotune (8.729 point. Point ude: 210)

DISTINCT og ORDER BY

Hej,

Jeg har denne SQL-sætning hvor jeg gerne vil sortere udtrækkene tilfældigt. Problemet er at jeg får en fejl om at DISTINCT og ORDER konflikter med hinanden:

SELECT DISTINCT bruger.ID, bruger.Navn, bruger.Adresse, PostnummerTabel.PostNr, PostnummerTabel.By FROM (PostnummerTabel INNER JOIN Bruger ON (PostnummerTabel.Postnr = bruger.PostNr) AND (PostnummerTabel.Postnr = bruger.PostNr)) INNER JOIN Keywords ON bruger.ID = Keywords.brugerID
WHERE (Keywords.Keyword Like '" & strKeyword & "%' OR bruger.Navn Like '" & strKeyword & "%') ORDER BY Rnd(-10000000*TimeValue(Now())*[bruger.ID])

Hvordan kan man komme uden om den? Er det noget med at man kan løse det med GROUP BY?

Mvh.

Skrevet fre. d. 27. august 2010 kl. 09:41:32| #1

jensen363
jensen363 (27.721 point)
Ved ikke om dette hjælper, men når jeg benytter mig af tilfældige data, eksempelvis til stikprøveudtagelse, benytter jeg denne funktion sammen med Rnd() syntaxen :

Function Randomizer() As Integer
Static AlreadyDone As Integer
        If AlreadyDone = False Then Randomize: AlreadyDone = True
    Randomizer = 0
End Function

Eksempel ( tilfældigt udtræk af 5 stikprøver )

SELECT TOP 5 qryIdentificérLogData_Husejere.[LEVDØR No], qryIdentificérLogData_Husejere.JLDATE, tblDate.Year, tblDate.WeekNo
FROM tblDate INNER JOIN qryIdentificérLogData_Husejere ON tblDate.OriginalDate = qryIdentificérLogData_Husejere.DATE
GROUP BY qryIdentificérLogData_Husejere.[LEVDØR No], qryIdentificérLogData_Husejere.JLDATE, tblDate.Year, tblDate.WeekNo
HAVING (((tblDate.Year)=[Vælg år : ]) AND ((tblDate.WeekNo)=[Vælg uge nr : ]) AND ((randomizer())=0))
ORDER BY Rnd(IsNull(qryIdentificérLogData_Husejere.[LEVDØR No])*0+1);

Skrevet fre. d. 27. august 2010 kl. 09:56:17| #2

torotune
torotune (8.729 point)
Hej - tak for dit eksempel. Men det er ikke tilfældighedsgeneratoren der er problemet. Det vil heller ikke virke med "ORDER by ID"

Det er kombinationen af DISTINCT og ORDER BY der ikke vil fungere.

Skrevet fre. d. 27. august 2010 kl. 10:01:46| #3

jensen363
jensen363 (27.721 point)
Ok, så vil en ekstra forespørgsel måske løse det

Skrevet fre. d. 27. august 2010 kl. 10:04:21| #4

janus_007
janus_007 (29.995 point)
ja jo.. det kan man måske også godt forstå den ikke lige vil. Men du kunne fjerne bruger.ID

ORDER BY Rnd(-10000000*TimeValue(Now()))

Det er jo stadigvæk helt random :)

Skrevet fre. d. 27. august 2010 kl. 11:02:28| #5

torotune
torotune (8.729 point)
Jeg kan godt fjerne ID, men problemet er stadig at ORDER og DISTINCT konflikter:

Fejl:

ORDER BY clause (Rnd(-10000000*TimeValue(Now()))) conflicts with DISTINCT.

Skrevet fre. d. 27. august 2010 kl. 14:54:48| #6

Christian_Belgien
Christian_Belgien (40.117 point)
torotune, hvad precis siger fejlmeddelelsen?  Du er vel opmaerksom paa at By er et reserveret ord i adskillige dialekter af SQL?  Der bestaar den mulighed at den konfliktende faktor er at du kalder et felt By.  Du har ogsaa den samme ON klausul to gange "ON (PostnummerTabel.Postnr = bruger.PostNr) AND (PostnummerTabel.Postnr = bruger.PostNr)", men det er vel blot overfloedigt uden at konflikte med noget.

Jeg testede din query i MySql fordi det er hvad jeg har til raadighed.  Jeg oprettede tre tabeller torotune_bruger, torotune_PostNr, og torotune_Keywords.  Jeg var noedt til at erstatte Rnd() med Rand() og TimeValue() med Timestamp().  Med disse rettelser, og ved at jeg kalte feltet "Stad" i stedet for "By" fik jeg denne query til at virke uden konflikter eller fejlmeldinger:

SELECT DISTINCT b.ID, b.Navn, b.Adresse, p.PostNr, p.Stad FROM torotune_PostNr p INNER JOIN torotune_bruger b ON p.Postnr = b.PostNr AND p.Postnr = b.PostNr INNER JOIN torotune_Keywords k ON b.ID = k.brugerID
WHERE k.Keyword Like 'navn3%' OR b.Navn Like 'navn3%'
ORDER BY Rand(-10000000*Timestamp(Now()));

Skrevet søn. d. 29. august 2010 kl. 19:32:26| #7

Christian_Belgien
Christian_Belgien (40.117 point)
torotune, fik du mit indlaeg?  Jeg ville vaere glad for en reaktion, isaer at du giver den noejagtige ordlyd paa fejlmeldingen.  Hvis du har haft tid til at teste  det at undgaa det reserverede ord By som feltnavn ville det ogsaa vaere interessant at kende resultatet.

Skrevet man. d. 30. august 2010 kl. 08:35:13| #8

torotune
torotune (8.729 point)
Hej igen Christian. Tak for din test der.

Min fejlmeddelelse siger:

ORDER BY-delsætningen (Rnd(-10000000*TimeValue(Now()))) er i konflikt med DISTINCT.

Jeg skal lige kigge lidt ekstra på den SQL-sætning du tester med der.

Mvh.

Skrevet fre. d. 03. september 2010 kl. 05:14:28| #9

Christian_Belgien
Christian_Belgien (40.117 point)
torotune, fik du kikket paa det?  Spoergsmaalet er en uge gammelt nu.  Det ville vaere godt enten at faa det konkluderet (lukket, med eller uden points til mig eftersom mit indlaeg viste sig at vaere nyttigt eller ikke) eller at faa dine specifikke reaktioner som man kan arbejde videre med.

Skrevet søn. d. 05. september 2010 kl. 15:39:02| #10

torotune
torotune (8.729 point)
Hej Christian, jeg fik ikke helt løst problemet, da jeg stadig har en konflikt mellem ORDER og DISTINCT. Men du skal have tak fordi du tog dig tid til at hjælpe og fordi du også testede det og fik det til at virke. Jeg accepterer herfor din hjælp som et svar. Mvh.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Link til et dokument

Oprettet den 10. februar 2012 kl. 14.15
omn giver 60 point for svar | Giv et svar »

Formular med flere paramtre

Oprettet den 9. februar 2012 kl. 16.48
stuegnu giver 100 point for svar | Giv et svar »

Kodemodul ???

Oprettet den 8. februar 2012 kl. 17.05
olejohn giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger