|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
Record univoci
Ciao,
Qualcuno può indicarmi un buon metodo per realizzare l'estrazione di due record per volta da un DB che non siano univoci? Mi spiego meglio: Devo realizzare una pagina la dove girano due banner pescati da un DB, dovrei fare in modo che non compaiono due banner uguali per volta... Ciao ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per definizione se estrai due record per volta da una tabella non possono essere univoci...
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
Ci sarà però un qualcosa per poter avere due record estratti casualmente fra quelli presenti purche non siano tutte e due identici.
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Nov 2002
Messaggi: 160
|
Cionci ha ragione...
ma il tuo problema lo risolvi a livello applicativo. Diciamo che nel tuo db hai una tabella con un campo id e un campo banner. Se il campo id è una chiave primaria ovviamente nella tabella non possono coesistere due record con id uguale. Da quello che ho capito devi tirare fuori da questa tabella due record qualunque basta che non abbiano id uguale es: SELECT * FROM tabella WHERE (id=x) OR (id=y) x e y nel tuo caso devono essere diversi. Il controllo che siano diversi lo devi fare nella tua applicazione. Ad esempio x e y li puoi tirare fuori da un generatore random e prima di richiamare la funzione di estrazione dal db (a cui passerai x e y) ti fai un cotrollo banale del tipo: if (x==y) then x=y+random(10); |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
Bene, farò qualche prova in merito.
La procedura random credo che dovrebbe essere fatta forse sul numero massimo di record contenuti nel db. Es. se nel db vi siano 20 record dovrebbero essere generati due random da 1 a 20 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
dipende da come estrapoli i dati, comunque la possibilità di estrarre casualmente la stessa tupla è 1/n in cui n è il numero di elementi.
MEMBRO DEL GRAN CONSIGLIO DELLE CACCOLEVERDI ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso Ultima modifica di Fenomeno85 : 16-05-2004 alle 20:26. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Scusa, ma non puoi tirare casualemnte (da programma) i due numeri sul numero totale di record a livello di applicazione ?
Fai una select su tutti i record...li scorri tutti e visualizzi solamente quelli che hai tirato su casualmente... Fenomento85: dovresti eliminare una delle due immagini dalla firma ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
se devessi estrarre due id da 1 a 20 userei una funzione che mi dia il primo id casualmente e poi generi l'altro ancora casualmente ma ricorsivamente fino a quando non è diverso dal precedente generato
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
così è sicuro che il secondo è diverso dal primo... però perdonami cionci... non è propriamente random in questo caso...
![]()
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo che è random...anche se ovviamente il numero successivo al primo ha una possibilità in più di essere estratto...
Altrimenti se si vuole fare propriamente random: - si tira su il primo su N e lo chiamo X - si tira su il secondo su N-1 e lo chiamo Y, se Y >= X allora Y = Y + 1; Y = Y modulo N Fare un ciclo per tentare un'estrazione diversa non è una politica molto corretta ![]() |
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Nov 2002
Messaggi: 160
|
Quote:
ma se la seconda estrazione la fai in un set che non contiene X allora Y è sicuramente diverso da X |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Pseudocodice: X = pseudocasuale su N; Y = pseudocasuale su N-1; se Y > X allora Y = (Y + 1) modulo N-1; Ultima modifica di cionci : 18-05-2004 alle 10:53. |
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Nov 2002
Messaggi: 160
|
Si si sono d'accordo!
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
boh... mi sento confusa
![]() abbiate pazienza ma la mia mente non è più tanto allenata ![]() ma se Y è un numero casuale nell'insime che non contiene X a che mi servono il controllo e l'assegnazione successiva se Y > X allora Y = (Y + 1) modulo N-1? eppoi se Y<N l'assegnazione Y = (Y + 1) modulo N-1 = Y + 1 allora a cosa mi serve il mod? o non ci sto con la testa ma non ci arrivo... ![]()
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Nov 2002
Messaggi: 160
|
Quote:
Dunque senza considerare l'insieme dei numeri: X è tirato su in modo random Anche Y è tirato su in modo random: ovviamente ci sono 2 casi da considerare 1) se Y!=X -> no problem! 2) se Y==X -> 2a) Y==1 -> Y = Y + qualcosa_random 2b) Y==n -> Y = Y - qualcosa_random qualcosa_random la fai come vuoi a mio giudizio |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
"pseudocasuale su N" singifica estrarre un numero pseudocasule fra 1 e N...in questo caso 20...
"pseudocasuale su N-1" significa estrarre un numero fra 1 e 19 e quindi potrebbe comparire nuovamente il primo numero estratto... Quindi se è maggiore o uguale a X si aggiunge 1 per escludere X dall'estrazione ![]() In effetti il modulo 20 non serve a niente... |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#19 | |
Member
Iscritto dal: Nov 2002
Messaggi: 160
|
Quote:
Guardati bene cosa ho scritto! E poi questo Y >= X allora Y = Y + 1 non è corretto visto che se Y=n sei fregato |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
Quote:
![]()
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:34.