/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Tilfældige records i databasen
Fra : Alex P.


Dato : 05-04-03 09:27

Jeg vil gerne lave en forespørgsel der viser records i aldeles tilfældig
rækkefølge, så der fra en stor tabel hvergang er nye records at vise på en
webside.

Hvad er syntaksen? Er der en måde at skrive random på i sqlsætningen (f.eks.
RND eller lign.)
Jeg bruger ADO til at connecte til MySQL, og skriver serverkoden i VBS.

På forhånd tak.

Alex P.



 
 
Jesper Stocholm (05-04-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 05-04-03 09:52

Alex P. wrote :

> Jeg vil gerne lave en forespørgsel der viser records i aldeles
> tilfældig rækkefølge, så der fra en stor tabel hvergang er nye records
> at vise på en webside.
>
> Hvad er syntaksen? Er der en måde at skrive random på i sqlsætningen
> (f.eks. RND eller lign.)
> Jeg bruger ADO til at connecte til MySQL, og skriver serverkoden i
> VBS.

du kan i mySQL gøre noget i retning af

SELECT Field1,Field2 FROM Table1 ORDER BY Random limit 0,5

der vist nok vil give en tilfældig sortering af rækkerne samt udtrække de
5 "første" af disse.

Vær dog opmærksom på, at ORDER BY Random angiveligt er meget performance-
krævende ... især ved store tabeller.

Dit spørgsmål har ikke specielt meget med ASP at gøre, så jeg sætter FUT
til dk.edb.database



FUT: dk.edb.database

--
Jesper Stocholm - www.stocholm.dk - www.asp-faq.dk
** De andre siger, at han er 16 **
Svar venligst til gruppen og ikke til mig privat !
Skriv under det du svarer på - www.usenet.dk/netikette/citatteknik.html

Alex P. (06-04-2003)
Kommentar
Fra : Alex P.


Dato : 06-04-03 10:49

Svar til Jesper Stocholm:

"Jesper Stocholm"
<skal.du.absolut.vise.min.emailadresse.ved.svar@stocholm.invalid> wrote in
message news:Xns93546E82F612Cspamstocholmdk@130.226.1.34...
> Alex P. wrote :
>
> > Jeg vil gerne lave en forespørgsel der viser records i aldeles
> > tilfældig rækkefølge, så der fra en stor tabel hvergang er nye records
> > at vise på en webside.
> >
> > Hvad er syntaksen? Er der en måde at skrive random på i sqlsætningen
> > (f.eks. RND eller lign.)
> > Jeg bruger ADO til at connecte til MySQL, og skriver serverkoden i
> > VBS.
>
> du kan i mySQL gøre noget i retning af
>
> SELECT Field1,Field2 FROM Table1 ORDER BY Random limit 0,5
>
> der vist nok vil give en tilfældig sortering af rækkerne samt udtrække de
> 5 "første" af disse.
>
> Vær dog opmærksom på, at ORDER BY Random angiveligt er meget performance-
> krævende ... især ved store tabeller.
>
> Dit spørgsmål har ikke specielt meget med ASP at gøre, så jeg sætter FUT
> til dk.edb.database

Det er korrekt at spørsmålet ikke er ASP-relateret hvis jeg skriver
forespørgslen inde i MySQL-databasen, men hvis jeg vil skrive den ude i
koden (ADO) så bliver det ren ASP.
Ved at skrive den i koden, kan jeg senere ændre mit setup til at køre med
andre databaser, f.eks. Access eller andre typer databaser hvor der er
skrevet OLEDB providere til.

Jeg håber på en universel måde at vælge random på, via ADO, så jeg ikke
behøver spekulere på om det vil virke med f.eks. Oracle.

>
>
> FUT: dk.edb.database
>

Alex P.



Jesper Stocholm (06-04-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 06-04-03 13:37

Alex P. wrote :

> Svar til Jesper Stocholm:
>
> "Jesper Stocholm"
> wrote in message news:Xns93546E82F612Cspamstocholmdk@130.226.1.34...
>> Alex P. wrote :
>>
>> > Jeg vil gerne lave en forespørgsel der viser records i aldeles
>> > tilfældig rækkefølge, så der fra en stor tabel hvergang er nye
>> > records at vise på en webside.

>> du kan i mySQL gøre noget i retning af
>>
>> SELECT Field1,Field2 FROM Table1 ORDER BY Random limit 0,5

Dette er forkert ... der skulle stå

SELECT Field1,Field2 FROM Table1 ORDER BY Rand() limit 0,5

>> Dit spørgsmål har ikke specielt meget med ASP at gøre, så jeg sætter
>> FUT til dk.edb.database
>
> Det er korrekt at spørsmålet ikke er ASP-relateret hvis jeg skriver
> forespørgslen inde i MySQL-databasen, men hvis jeg vil skrive den ude
> i koden (ADO) så bliver det ren ASP.

Du skal jo under alle omstændigheder lave en forespørgsel imod databasen
- hvilket jeg antager du skriver passende SQL til. Selve denne
forespørgsel skal være specifikt skrevet til den enkelte type database,
og har ikke så meget med selve forbindelsen at gøre - som fx ODBC/Ole-DB
etc.

> Ved at skrive den i koden, kan jeg senere ændre mit setup til at køre
> med andre databaser, f.eks. Access eller andre typer databaser hvor
> der er skrevet OLEDB providere til.
>
> Jeg håber på en universel måde at vælge random på, via ADO, så jeg
> ikke behøver spekulere på om det vil virke med f.eks. Oracle.

Den findes desværre ikke. ADO er jo "blot" en slags wrapper omkring
forbindelsen til- og svar fra databasen. De forespørgsler du afvikler
imod databasen - fx SELECT-forespørgsler - er nødt til at være udformet,
så de forståes af den enkelte database.

Det kan i teorien godt lade sig gøre at lave en funktion i et eller andet
sprog, der via almindelige SQL-forespørgsler og ADO udtrækker et antal
tilfældige rækker i en database/tabel, men jeg vil vove den påstand, at
de som oftest vil performe relativt dårligt eller have nogle krav til
databasens/tabellernes struktur, der kan være svære at opnå i den
virkelige verden.



--
Jesper Stocholm - http://stocholm.dk
www.asp-faq.dk : FAQ for dk.edb.internet.webdesign.serverside.asp
www.usenet.dk/netikette/citatteknik.html : Skriv under det du svarer på
Svar til gruppen og ikke til mig privat !

Alex P. (06-04-2003)
Kommentar
Fra : Alex P.


Dato : 06-04-03 20:32

Svar til Jesper Stocholm:

> >> SELECT Field1,Field2 FROM Table1 ORDER BY Random limit 0,5
>
> Dette er forkert ... der skulle stå
>
> SELECT Field1,Field2 FROM Table1 ORDER BY Rand() limit 0,5
>
[Snip]

> Du skal jo under alle omstændigheder lave en forespørgsel imod databasen
> - hvilket jeg antager du skriver passende SQL til. Selve denne
> forespørgsel skal være specifikt skrevet til den enkelte type database,
> og har ikke så meget med selve forbindelsen at gøre - som fx ODBC/Ole-DB
> etc.
>
> > Ved at skrive den i koden, kan jeg senere ændre mit setup til at køre
> > med andre databaser, f.eks. Access eller andre typer databaser hvor
> > der er skrevet OLEDB providere til.
> >
> > Jeg håber på en universel måde at vælge random på, via ADO, så jeg
> > ikke behøver spekulere på om det vil virke med f.eks. Oracle.
>
> Den findes desværre ikke. ADO er jo "blot" en slags wrapper omkring
> forbindelsen til- og svar fra databasen. De forespørgsler du afvikler
> imod databasen - fx SELECT-forespørgsler - er nødt til at være udformet,
> så de forståes af den enkelte database.
>
> Det kan i teorien godt lade sig gøre at lave en funktion i et eller andet
> sprog, der via almindelige SQL-forespørgsler og ADO udtrækker et antal
> tilfældige rækker i en database/tabel, men jeg vil vove den påstand, at
> de som oftest vil performe relativt dårligt eller have nogle krav til
> databasens/tabellernes struktur, der kan være svære at opnå i den
> virkelige verden.
>
>

Ja, - jeg håbede blot på en 'næsten' universel kode - der er jo ikke så
meget forskel på de simple forespørgslers syntaks.
Jeg prøver med ORDER BY Rand() som jeg tror også vil virke andre steder.
MySQL 4.0.1 kan faktisk som noget ganske nyt, lave en catched query, så den
hentes fra RAM'en næste gang, hvis der ikke er ændret i databasen.
Ganske smart til netop den slags tunge forespørgsler.

Alex P.




Jesper Stocholm (06-04-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 06-04-03 21:04

Alex P. wrote :

> Svar til Jesper Stocholm:
>
>> Det kan i teorien godt lade sig gøre at lave en funktion i et eller
>> andet sprog, der via almindelige SQL-forespørgsler og ADO udtrækker
>> et antal tilfældige rækker i en database/tabel, men jeg vil vove den
>> påstand, at de som oftest vil performe relativt dårligt eller have
>> nogle krav til databasens/tabellernes struktur, der kan være svære at
>> opnå i den virkelige verden.
>>
>>
>
> Ja, - jeg håbede blot på en 'næsten' universel kode - der er jo ikke
> så meget forskel på de simple forespørgslers syntaks.

Den universelle metode er (groft beskrevet):

.... kræver blot at der eksisterer en primær nøgle, eller
at en række kan unikt identificeres ved værdien i et
felt

1.
Udtræk alle ids fra din tabel

2.
Put data ind i et array i din applikation

3.
Udtræk 5 tilfældige værdier i dette array

4.
Udtræk 5 rækker fra din tabel svarende til de 5 tilfældige værdier i dit
array


> Jeg prøver med ORDER BY Rand() som jeg tror også vil virke andre
> steder.

Det kan du ikke regne med ...



--
Jesper Stocholm - http://stocholm.dk - http://asp-faq.dk
Skriv venligst under det du svarer på og skær det overflødige væk.
Se evt hvorfor på http://www.usenet.dk/netikette/citatteknik.html
Svar venligt til gruppen og ikke til mig privat !

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste