Selezione da ordine alfabetico per tipo

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Salve, premetto di essere un principiante, gestisco un sito sui videogiochi in asp con database per gestire gli articoli, il mio problema risiede nell'ordinare gli articoli in ordine alfabetico cioè da una lista di lettere. Per farvi capire meglio vi mostro il sito http://www.retrogaming.it

Allora una volta entrati nel sito l'utente sceglie una console dalla lista sistemi, clicca ed entra nella pagina console.asp?id=(console) e in questa pagina compaiono solo i giochi della console scelta e fin qui funziona, ora io vorrei che una volta entrati nella pagina console.asp?id=(console) appaia una lista di lettere (A,B,C ecc.) e cliccando su una lettera appaia la lista di articoli (articolo.asp?id=) corrispondenti alla lettera e alla console scelta.

Vi mostro il codice presente nella pagina console.asp:

<!--#include file="connessione.asp"-->
<%idx = request("id")%>


<%
Set RSa = Server.CreateObject("ADODB.Recordset")
RSa.ActiveConnection = con
sqlString = "select id from console where lcase(nome) = '" & lcase(idx) & "'"
RSa.open sqlString
idr = rsa("id")
ok = -1
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = con
sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND console =" & idr
RS.open sqlString
while not rs.eof
foto = rs("foto1")
if foto = "" or isnull(foto) then
foto = "vuota.jpg"
end if

Set RSb = Server.CreateObject("ADODB.Recordset")
RSb.ActiveConnection = con
sqlString = "select nome from console where id=" & rs("console")
RSb.open sqlString
%>
<p class="testo">
<a class="testol" href="articolo.asp?id=<%=rs("id")%>"><img src="img.aspx?img=/public/<%=foto%>&height=60" alt="<%=rs("titolo")%>" hspace="5" border="0" align="left"><b><font color="#C40014"><%=rs("titolo")%></font></b></a><br>Sistema: <%=rsb("nome")%><br>Anno: <%=rs("anno")%>
<%rs.movenext
wend%>

Grazie di tutto:)
 
Ciao e benvenuto :)

Per fare ciò che ti occorre, nel link di ogni lettera punterai a
console.asp?id=<%=request.querystring("id")%>&lettera=A

A quel punto, alla WHERE della query della pagina console.asp aggiungi "AND articolo LIKE '" & request.querystring("lettera") & "%'

:byebye:
 
Grazie per la risposta PoLe, ci ho provato ma non ci riesco mi da sempre errore. Potresti mostrarmi come fare? sono ancora una schiappa:mad:

Grazie per tutto
 
Tu hai:

sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND console =" & idr

Devi modificare la variabile che contiene la query cosi:

Dim lettera
lettera = Server.HTMLEncode(Request.QueryString("lettera"))

sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND console =" & idr

If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "%'"
End If

... o qualcosa del genere... prova!

Attenzione:

1. non so se il campo in cui vuoi effettuare la ricerca per iniziale si chiama "titolo" in caso modificalo col suo nome;

2. nella ricerca per LIKE ho usato il carattere % che vale per MySQL, mentre per Access devi usare * quindi:

sqlString = sqlString & " AND titolo LIKE '" & lettera & "*'"

Fammi sapere!
 
Niente da fare ho fatto tutto come mi hai descritto ma nulla mi esce solo la lista di lettere e quando ci clicco sopra non appare nulla...

<a href="console.asp?id=<%=request.querystring("id")%>&lettera=A">A</a>
</td>
<td width="5%">
<a href="console.asp?id=<%=request.querystring("id")%>&lettera=B">B</a>
</td>
<td width="5%">
<a href="console.asp?id=<%=request.querystring("id")%>&lettera=C">C</a>
</td>
<td width="5%">
<a href="console.asp?id=<%=request.querystring("id")%>&lettera=D">D</a>
</td>...
<td width="5%">
<a href="console.asp?id=<%=request.querystring("id")%>&lettera=Z">Z</a>
</td>

</tr>
</table>
<%
Set RSa = Server.CreateObject("ADODB.Recordset")
RSa.ActiveConnection = con
sqlString = "select id from console where lcase(nome) = '" & lcase(idx) & "'"
RSa.open sqlString
idr = rsa("id")
ok = -1
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = con
Dim lettera
lettera = Server.HTMLEncode(Request.QueryString("lettera"))
sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND console =" & idr
If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "*'"
End If
RS.open sqlString
while not rs.eof
foto = rs("foto1")
if foto = "" or isnull(foto) then
foto = "vuota.jpg"
end if

Set RSb = Server.CreateObject("ADODB.Recordset")
RSb.ActiveConnection = con
sqlString = "select nome from console where id=" & rs("console")
RSb.open sqlString
%>
<p class="testo">
<a class="testol" href="articolo.asp?id=<%=rs("id")%>"><img src="img.aspx?img=/public/<%=foto%>&height=60" alt="<%=rs("titolo")%>" hspace="5" border="0" align="left"><b><font color="#C40014"><%=rs("titolo")%></font></b></a><br>Sistema: <%=rsb("nome")%><br>Anno: <%=rs("anno")%>
<%rs.movenext
wend%>

Uso Access quindi ho messo * poi la colonna da dove deve cercare per lettera è "titolo" quindi stava bene, per il resto non so cosa cambiare...:crying:
 
Un errore c'è... dopo la creazione della stringa SQL di cui al mio precedente messaggio, apri il recordset:

RS.open sqlString

ma ci manca qualcosa, ovvero l'associazione della connessione ed il cursore.

Modifica la riga che ti ho scritto sopra cosi:

RS.open sqlString, con, 1

Fammi sapere.
 
Fatto ma nulla. Il codice ora è questo:

Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = con
Dim lettera
lettera = Server.HTMLEncode(Request.QueryString("lettera"))
sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND console =" & idr
If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "*'"
End If
RS.open sqlString, con, 1
while not rs.eof
foto = rs("foto1")
if foto = "" or isnull(foto) then
foto = "vuota.jpg"
end if

Il risultato è che ora mi appare la lista di lettere e sotto tutte le recensioni della console selezionata, quando io clicco su una lettera non ricava nulla resta solo la lista di lettere.

http://www.retrogaming.it/console.asp?id=Amiga

Grazie per la disponibilità Lukeonweb:fonzie:
 
Il sito è fighissimo, complimenti :)

Si tratta di recensione giochi, vero???

Veniamo a noi. Fammi una cortesia, prima di aprire il recordset, stampa a video la variabile contiene la stringa SQL, quindi modifica un attimo il codice cosi:

...
End If
Response.Write sqlString
RS.open sqlString, con, 1
...

Naturalmente devi solo aggiungere:

Response.Write sqlString

dove ti ho indicato.

Fai questa prova ed avvisami quando hai finito che do un occhio (lascia il response write online per un po), in modo che cerco di capire che cavolo di query stiamo tentandodi eseguire :)
 
Grazie per i complimenti, si è un sito sui videogiochi d'epoca con uno sguardo a quelli nuovi:)

Comunque ho fatto come hai detto, ormai pendo dal tuo sapere, speriamo bene! :fonzie:
 
Perfetto, quindi vedo, cliccando sulla V:

SELECT * from articoli WHERE attivo = -1 AND console =16 AND titolo LIKE 'V*'

Ovvero quel che mi aspettavo.

Un paio di cose: attivo = -1 è giusto? è un campo numerico? comunque non risolve il problema perchè c'è anche senza la lettera...

SELECT * from articoli WHERE attivo = -1 AND console =16

Per quanto mi stia sulle scatole =16 senza lo spazio (= 16) comunque non risolve nulla... quindi una domanda: il campo su cui effettuiamo la ricerca con LIKE si chiama titolo?

Se si, prova a scaricare il file Access in locale ed esegui la query:

SELECT * from articoli WHERE attivo = -1 AND console =16 AND titolo LIKE 'V*'

per V o per una lettera che sai che contiene giochi, direttamente attraverso Access, nella scheda Query ed eseguendola attraverso l'SQL di Access.

E' diventata una qustione di principio, fammi sapere ;)
 
Ho fatto come hai detto e stranamente su Access se eseguo la Query mi da i risultati giusti!

la Query è:

SELECT * from articoli WHERE attivo = -1 AND console =16 AND titolo LIKE 'A*' (ho cambiato solo la lettera V con la A)

da "console = 16" (AMIGA) ricava 4 recensioni con la lettera A ed è giusto.

Ora come procedo???
 
Prova a sosituire (nella pagina ASP) il carattere * con % nella porzione di codice dopo LIKE, quindi:

If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "%'"
End If

Fammi sapere.

Approfitto per un piccolo OT: mandami un messaggio privato e spiegami esattamente di cosa tratta il sito e che scopo ha... sono interessato ad un progetto del genere, se è quello che ho in mente, quindi mi interesserebbe ipotizzare delle collaborazioni ;)
 
Evvaiiii! Ce l'abbiamo fatta!!! :elvis: grande Luke!

Ci sentiamo in privato, grazie ancora di tutto.

Un ultimo aiuto. Io ho fatto in modo che quando si clicca sulla lettera gli articoli appaiono in ordine alfabetico aggiungendo "order by articoli.titolo":

RS.ActiveConnection = con
Dim lettera
lettera = Server.HTMLEncode(Request.QueryString("lettera"))
sqlString = "SELECT top 10* from articoli WHERE attivo = " & ok & " AND console = " & idr
If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "%' order by articoli.titolo"
End If
RS.open sqlString, con, 1

Poi ho aggiunto top 10 per visualizzare solo dieci articoli, ma purtroppo appaiono solo i primi 10 e non gli ultimi ho provato ad aggiungere a ...& idr order by articoli.titolo desc" ma non funziona. Che devo fare??

Ciao Luke
 
Ultima modifica:
Ho risolto tutto creando una nuova pagina chiamata archivio contenente la query di selezione. Ora è perfetto:)

Grazie ancora di tutto lukeonweb.
 
Ciao a tutti oggi mi sono imbattuto in un errore, il mio sito contiene anche recensioni con il titolo che inizia per numero, quindi non viene elencato per lettera. Ho provato a fare così:

<a class="menualto" href="archiviotipo.asp?id=<%=request.querystring("id")%>&lettera=0">#</a>

ma nessun risultato.

cosa posso fare per farmi comparire gli articoli che iniziano per numero?

Il codice presente nella pagina che riceve l'id è questo:

Codice:
<%
Set RSa = Server.CreateObject("ADODB.Recordset")
RSa.ActiveConnection = con
sqlString = "select id from redazionale where lcase(nome) = '" & lcase(idx) & "'"
RSa.open sqlString
idr = rsa("id")
ok = -1
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = con
Dim lettera
lettera = Server.HTMLEncode(Request.QueryString("lettera"))
sqlString = "SELECT * from articoli WHERE attivo = " & ok & " AND redazionale = " & idr
If Len(Trim(lettera)) = 1 Then
sqlString = sqlString & " AND titolo LIKE '" & lettera & "%' order by articoli.titolo"
End If
RS.open sqlString, con, 1
while not rs.eof
foto = rs("foto11")
if foto = "" or isnull(foto) then 
foto = "vuota.jpg"
end if

Set RSb = Server.CreateObject("ADODB.Recordset")
RSb.ActiveConnection = con
sqlString = "select nome from console where id=" & rs("console")
RSb.open sqlString
%>

Ciao e grazie:elvis:
 

Discussioni simili