Newsgroup: it.comp.www.asp
Titolo: paginazione su piu' recordset

Lo script della paginazione funziona sui contenuti di un recordset. Se
volessi dividere in pagine i contenuti di piu' recordset? Esempio:
faccio 3 select su di una tabella per ordinare i risultati in base alla
diversa rilevanza di 3 campi diversi, dopodiche' vorrei dividere in
pagine tutta la sequenza dei risultati. La prima cosa che mi viene in
mente e' di utilizzare un quarto recordset in cui metto i risultati dei
primi 3 e faccio la paginazione su questo quarto recordset. E'
fattibile? Come creo il quarto recordset a partire dai primi 3 ? O la
via da seguire e' un'altra?
Grazie e ciao
Roberto Trama
http://www.capriweb.com

 ha scritto nel messaggio
news:39645C01...@capri.it...


 via da seguire e' un'altra?
Be' imho (ma molto dipende dal tuo server database) la procedura migliore
e':
creare una stored procedure che ritorni le tre query come un unico
recordset, e poi paginare su quello.
'guri, Nettuno


Se vuoi unire i risultati di più Select e ordinarli come se fossero uno solo
puoi usare:
Select * from tabella1 union Select * from tabella2 union Select * from
tabella3 order by nome
Quindi utilizzi la paginazione...
Ciao,
Andrew

 puoi usare:
Il problema e' che non voglio ordinare tutto assieme, io invece ho bisogno
proprio di concatenare le 3 select (gia' ordinate singolarmente) una dietro
l'altra. Mi spiego meglio:
I 3 campi (stelle3, stelle2, stelle1) su cui effettuo le select sono elenchi di
parole chiave non ordinabili, mentre l'ordinamento avviene su un altro campo
numerico (punti). A me serve un ordinamento del tipo:
[stelle/punti]
stelle3 / 3
stelle3 / 2
stelle3 / 1
stelle2 / 3
stelle2 / 2
stelle2 / 1
stelle1 / 3
stelle1 / 2
stelle1 / 1
per fare questo ho bisogno delle 3 select distinte, ognuna ordinata per conto
suo:
keyword = Request.Form("cerca")
1) "select * from tabella where stelle3 like '%" & keyword & "%' order by punti"
2) "select * from tabella where stelle2 like '%" & keyword & "%' order by punti"
3) "select * from tabella where stelle1 like '%" & keyword & "%' order by punti"
Any suggestion?
Grazie e ciao
Roberto

 recordset, e poi paginare su quello.
Ma mi concatenerebbe le 3 select una dietro l'altra senza stravolgere
l'ordinamento di ognuna? (vedi la risposta ad Andrew, dove specifico il tipo
di ordinamento che intendevo usare)
Lancio una ipotesi: sarebbe complicato creare una estensione o un metodo
dell'oggetto Recordset che permetta di concatenare piu' recordset? Qualcosa
del tipo:
Dim Rs4
Set Rs4 = Server.CreateObject("ADODB.Recordset")
Rs4.concatena(Rs1,Rs2,Rs3)
??
[Se ho detto una c***ata sorvolate, please.]
Grazie e ciao
Roberto

 recordset??
Ho trovato questo (da VB, La programmazione di database, Apogeo):
SHAPE {SELECT * FROM CLIENTE}
APPEND ({SELECT * FROM AUTO} AS rsAuto
                    RELATE codice TO cliente)
<<... Non abbiamo fatto altro che informare il provider di voler costruire un
Recordset a partire da tutte le righe presenti in CLIENTE aggiungendo il
Recordset rsAuto costituito da tutte le righe presenti in AUTO, dove il codice
cliente corrisponde alla chiave esterna 'cliente' di AUTO. Il comando deve
essere inserito come proprieta' Source del Recordset. L'operazione e molto
simile ad una Join...>>
Secondo te si puo' adatare allo scopo e puo' interrogare la stessa tabella? Mi
sa che bisogna provare...
Ciao
Roberto


Appunto...  ;-)
select * from tabella where stelle3 like '%" & keyword & "%' union select *
from tabella where stelle2 like '%" & keyword & "%' union select * from
tabella where stelle1 like '%" & keyword & "%' order by stelle desc,punti
desc"
questo è quello che credo serva a te...

 ha scritto nel messaggio
news:3965E16B...@capri.it...


 ... questo è quello che credo serva a te...
Non mi sono spiegato...
I campi stelle sono 3 (3stelle,2stelle,1stella) e ognuno di essi  e' un campo
testo in cui inserisco delle parole chiave: io voglio ordinare in base al campo
punti i record che hanno keywords nel campo 3stelle, dopodiche' (sempre ordinati
sui punti) quelli che hanno keywords in 2stelle, etc.. Cioe' e' il riscontrare
la parola nel campo 3stelle che fa apparire prima il risultato rispetto ad un
altro che ha lo stesso riscontro pero' in 2stelle (anche se ha un punteggio
maggiore). Se ordino in base ad uno dei campi stelle, l'ordine sara' quello dato
dalle lettere alfabetiche della prima keyword che e' scritta nel campo,
assolutamente senza significato.
Esempio concreto:
id | 3stelle | 2stelle | 1stella | punti
1 | capri sorrento | napoli | procida | 2
2 | napoli ischia | capri procida | sorrento amalfi | 4
3 | sorrento procida | napoli ischia | capri | 3
4 | capri amalfi | positano sorrento | napoli | 5
5 | pompei | sorrento | napoli | 6
se faccio la ricerca per la parola "capri" la sequenza dei risultati dovra'
essere:
    4-1-2-3
cioe': prima quelli che hanno la keyword "capri" in 3 stelle ordinati per punti,
poi 2 stelle, infine 1 stella..
[Se facessi una unica query (con stelle desc) la sequenza sarebbe: 2-4-3-1 ]
se invece la ricerca e' per "napoli", la sequenza sara' :
    2-3-1-5-4
E' per questo che ho bisogno di concatenare le 3 query....
Ciao
Roberto

>
In questo modo costruisci recordset cosiddetti gerarchici, ovvero un
recordset che ti da' i clienti ed un altro recordset che automaticamente ti
viene "popolato" con le auto del cliente corrente nel primo recordset.
Non credo che sia il tuo caso.
Se la UNION che ti e' stata proposta non ti piace puoi creare un recordset
in memoria ed aggiungere i record delle varie select.
Per creare il recordset:
- set rs = createobject("adodb.recorset").
- rs.fields.append ....
- rs.fields.append ...
- rs.CursorType = adOpenStatic
- rs.LockType = adLockBatchOptimistic
- rs.open 
Antonio

 - rs.fields.append ...
Non e' che non mi piace, e' che non mi conserva l'ordinamento separato dei tre
recordset.
La parola "append" e' interessante, ma non l'ho trovata nella reference di ADO
Recordset. Mi potresti indicare la sintassi precisa? Lavora 'appendendo' un
record alla volta con un ciclo?Che ne pensi di usare rs.addNew (cfr.messaggio:
"Possibile soluzione concatenazione recordset") ?
Grazie e ciao
Roberto

 recordset.
Se in una Union vuoi tenere separati i recordset basta che aggiungi nelle
sql dei campi costanti crescenti e poi li usi nella order by, ad esempio:
select "1" as ordine, file1.*
Union
select "2" as ordine, file2.*
Union
select "3" as ordine, file3.*
Order by ordine
seguito eventualmente dagli altri campi di ordinamento.
Giorgio Leonardi

 di ordinamento che intendevo usare)
Certo: se fai 3 query una in fila all'altra e tutte mettono i loro dati
dentro ad una tabella temporanea, per esempio, non e' che il server, in un
estro creativo le mette tutte ordinate in base ad un criterio di default. Le
lascia cosi' come sono.
Ciao
Nettuno

 sql dei campi costanti crescenti e poi li usi nella order by
Ah! Ecco la soluzione che cercavo! Grazie!
Grazie anche e tutti gli altri, in particolare ad Andrew che ha aperto la strada
parlando di UNION.
Ciao
Roberto