Estrarre record in modo casuale da database

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Salve a tutti amici di Mr.Webmaster! Allora io ho un sito in asp con un database Access, nella home page compaiono 6 immagini con titolo che rappresentano gli ultimi articoli divisi per categoria, ora io vorrei sapere se c'è un modo per far si che i 6 articoli non siano gli ultimi ma siano presi a caso dal database. vi mostro il mio codice:

Codice:
<%Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale <> 3 order by articoli.foto1 desc, articoli.id desc "
RS.open sqlString
foto = rs("foto1")
if foto = "" or isnull(foto) then 
foto = "vuota.jpg"
end if
%>
<%Set RSa = Server.CreateObject("ADODB.Recordset")
RSa.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 2 order by articoli.id desc"
RSa.open sqlString
foto2 = rsa("foto1")
if foto2 = "" or isnull(foto2) then 
foto2 = "vuota.jpg"
end if
%>
<%Set RSb = Server.CreateObject("ADODB.Recordset")
RSb.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 5 order by articoli.id desc"
RSb.open sqlString
foto3 = rsb("foto1")
if foto3 = "" or isnull(foto2) then 
foto3 = "vuota.jpg"
end if
%>
<%Set RSc = Server.CreateObject("ADODB.Recordset")
RSc.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 9 order by articoli.id desc"
RSc.open sqlString
foto4 = rsc("foto1")
if foto4 = "" or isnull(foto2) then 
foto4 = "vuota.jpg"
end if
%>
<%Set RSd = Server.CreateObject("ADODB.Recordset")
RSd.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 10 order by articoli.id desc"
RSd.open sqlString
foto5 = rsd("foto1")
if foto5 = "" or isnull(foto2) then 
foto5 = "vuota.jpg"
end if
%>
<%Set RSe = Server.CreateObject("ADODB.Recordset")
RSe.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 8 order by articoli.id desc"
RSe.open sqlString
foto6 = rse("foto1")
if foto6 = "" or isnull(foto2) then 
foto6 = "vuota.jpg"
end if
%>
<%Set RSf = Server.CreateObject("ADODB.Recordset")
RSf.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 7 order by articoli.id desc"
RSf.open sqlString
foto7 = rsf("foto1")
if foto7 = "" or isnull(foto2) then 
foto7 = "vuota.jpg"
end if
%>
<%Set RSg = Server.CreateObject("ADODB.Recordset")
RSg.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 3 order by articoli.id desc"
RSg.open sqlString
foto8 = rsg("foto1")
if foto8 = "" or isnull(foto2) then 
foto8 = "vuota.jpg"
end if
%>

Ciao a tutti e grazie:fonzie:
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Ciao Francesco!

Prova ad utilizzare innanzitutto un solo Recordset (prima che IIS ti picchi a sangue) ed usa una queri del genere:

SELECT TOP 6 * FROM tabella ORDER BY RND(campo_numerico)

Dunque:

- TOP 6 ti estrae solo 6 record;

- alla funzione RND devi passare un campo numerico, ad esempio l'ID della tabella.

Ho sepre fatto questa cosa con MySQL e non con Access, quindi non sono certo che funzioni... ad occhio mi pare la soluzione... in caso: poi vediamo ;)
 

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Luke ho fatto come mi hai detto ho messo order by RND(articoli.id) mi ha preso degli articoli a caso ma solo una volta, cioè se faccio refresh non cambiano restano sempre gli stessi. Anche se riavvio il browser prende sempre quelli.

Cosa posso fare?
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
La butto giù cosi, magari per adattarlo alle tue esigenze devi fare un ritocchino qui e li... non so!

Testa e fammi sapere ;)

<%
rs.Open "SELECT TOP 6 * FROM tabella ORDER BY RND(id)", cn, 1
While rs.EOF = False
Response.Write rs("nome_campo") & "<br>"
rs.MoveNext
Wend
rs.Close
%>
 

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Non riesco ad adattarlo io avevo fatto così:

Codice:
<%Set RSa = Server.CreateObject("ADODB.Recordset")
RSa.ActiveConnection = con
sqlString = "SELECT articoli.id as iddo, articoli.titolo, console.nome, autori.nome, articoli.foto1, articoli.paragrafo1 FROM (articoli LEFT JOIN autori ON articoli.autore = autori.id) LEFT JOIN console ON articoli.console = console.id where articoli.redazionale = 2 order by rnd(articoli.id)"
RSa.open sqlString
foto2 = rsa("foto1")
if foto2 = "" or isnull(foto2) then 
foto2 = "vuota.jpg"
end if
%>

Mi serve che estragga un solo record casualmente.

Ciaooo Luke fammi sapere:byebye:
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Luke ho fatto come mi hai detto ho messo order by RND(articoli.id) mi ha preso degli articoli a caso ma solo una volta, cioè se faccio refresh non cambiano restano sempre gli stessi. Anche se riavvio il browser prende sempre quelli.

Cosa posso fare?

Dato questo tuo messaggio pensavo ne volessi estrarre N, non uno solo...

In ogni caso, a questo punto, elimina il ciclo ed inizia a testare direttamente su Access la query che ti ho postato e vedi, testandola più di una volta, se il risultato che ti tira fuori è sempre lo stesso o meno.

Se con l'istruzione SQL non la risolviamo, passiamo alla soluzione-ASP.

Fammi sapere!
 

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Allora sto testando su Access questa query:

SELECT TOP 6 * FROM articoli ORDER BY RND(id)

Funziona mi prende sempre 6 articoli diversi.

Poi ho provato sempre in Access questa query:

SELECT articoli.id as iddo, articoli.titolo, articoli.foto1, articoli.paragrafo1 FROM articoli where articoli.redazionale = 2 order by rnd(articoli.id);

Funziona mi prende un solo articolo filtrato per redazionale che sarebbe la tipologia dell'articolo.

Ho notato una cosa però, riprovando il codice su internet ho scoperto che facendo refresh non cambia l'articolo però è diverso da quello dell'altra volta...quindi che significa? che ogni volta che accendo il pc cambia? oppure ogni giorno? non so...:confused:
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Sicuramente non devi usare la clausola TOP, oppure settala su 1, oppure se non fai il ciclo puoi anche non suarla: non se se il motore Jet di Access si sforza di più o di meno... non se, vedi se usarlo (settato su 1) o meno.

Venendo al punto, se funziona sul tuo computer dovrebbe (e sottolineo il condizionale) funzionare ovunque al refresch, ovvero ogni volta che la query viene eseguita.

Attenzione: se hai 3 record potrebbe anche sembrare, su 5 refresh ad esempio, che ti carichi sempre lo stesso; potrebbe essere una caso! Se invece hai decine o centinaia di record e su 10 refresh ti prende sempre lo stesso, per il calcolo delle probabilità è facile immaginare che ci sia un problema.

Fai un altro test monitorando attentamente la query che esegui, testala su Access, offline, online e fammi sapere.

Se ancora non va tagliamo la testa a quella povera bestia del toro e passiamo al piano B!
 

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Per ora insieme allo staff abbiamo deciso di fare diversamente, quindi per il momento fermo gli esperimenti, però resto curioso, chissà forse più avanti testerò più a fondo questo argomento.

Alla prossima Luke:ilpirata:
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Estrarre un record in modo orizzontale, ma solo i record richiamati da un codice Classic ASP 2
sandropochi [PHP] Query per estrarre record con data successiva a quella odierna PHP 2
giancadeejay [PHP] Estrarre solo record dell'utente connesso PHP 4
giancadeejay estrarre record specifico da db Database 17
G ESTRARRE VALORI MASSIMI E MINIMI IN UN INTERVALLO DI RECORD Database 7
S estrarre e stampare a video un record in un div PHP 7
L Estrarre record di un dato mese MySQL 5
A estrarre record da DB PHP 9
I estrarre record da 2 tabelle mysql con riferimento id_utente uguale Database 3
A Estrarre solo un certo numero di record e scorrimento pagine PHP 9
G Estrarre record tramite "parte di campo" Classic ASP 2
G Estrarre l'ultimo record del db dal link Classic ASP 6
G estrarre record da un database con menu a tendina Classic ASP 4
M Estrarre Record Casualmente MS Access 10
F Estrarre record in ordine casuale Classic ASP 0
grottafelix Estrarre 4 record per riga Classic ASP 4
N Estrarre un insieme casuale di record utilizzando SQL Database 0
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
M Estrarre soltanto i prodotti con stessa descrizione PHP 10
peppe0703 Come Estrarre dati da db wordpress e richiamarli in html esterno HTML e CSS 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
E Estrarre dati da doppia tabella, banale ma non sempre PHP 1
M Estrarre valore con SELECT COUNT PHP 0
D Estrarre database con link esterno Database 10
S Raggruppare ed estrarre data più recente MySQL 6
F Estrarre ultima foto da cartelle PHP 2
R Estrarre valori duplicati più volte PHP 0
C Estrarre dati stringa Sql Database 1
L estrarre valori max tra più tabelle MySQL 2
L Estrarre da Cartella una determinata 'via' PHP 15
J estrarre url dei file video da youtube "get_video_info" PHP 6
M Estrarre dati da un database PHP 2
M Estrarre valori MAX da un db con una left join MySQL 8
M Estrarre dati da una select HTML PHP 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
S [PHP] Estrarre dati da tabella e fare la media ad intervalli di tempo PHP 11
R [PHP] Estrarre id utente loggato.? PHP 4
S [PHP] Estrarre elementi array su più variabili PHP 5
S [PHP] Estrarre dati tabella in diversi array PHP 2
P [MS ACCESS] Estrarre più somme da una query MS Access 4
trattorino estrarre titolo video facebook in php PHP 0
D [WordPress] come fare per estrarre dati da un db MySQL tramite una form e visualizzare il risultato WordPress 0
S [Javascript] come estrarre valori array e inserirli in diverse variabili Javascript 1
N [PHP] Estrarre singolo valore da array PHP 4
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
P [Visual Basic] access sql estrarre id vendite x cli e articolo con data maggiore del recordset Visual Basic 2
Jensen [PHP] Estrarre prossimi 4 lunedì PHP 4
trattorino [PHP] estrarre dati singoli PHP 1
G [PHP] estrarre data da timeline yyyy-dd-gg hh:mm:ss PHP 4
Z Estrarre dati da un DB Mysql PHP 4

Discussioni simili