+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: select top ...

  1. #1
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    Cari Amici
    dovrei selezionare da una tabella solo i primi 2 record di ogni categoria presente nel db
    che contiene una decina di categorie e circa 20 aticoli per ogni categoria,
    ma non conosco la sintassi corretta della stringa
    ho provato questa strada


    SQL="select top 2 * from elencofile where categoria='topazio' or categoria='ancestrale' or categoria='agata'"

    ma mi restituisce comunque solo 2 record in assoluto e non 2 per categoria

    e comunque con questa sintassi il processo non diventa automatico,
    ma devo preparare la select conoscendoendo a priori il valore di ogni categoria,

    forse per risolvere il problema dovrei preparare prima una select che mi seleziona tutti i tipi di categorie inserite nel db e poi usarne il risultato per completare la stringa dopo where, ma non riesco a capire il sistema
    qualcuno puo' indicarmi la stada da seguire

    questa e' la struttura db database
    se dovesse servire
    nome tabella:
    elencofile
    campi:
    id
    categoria
    nome
    descrizione
    percorso foto

    saluti e grazie


  2. #2
    Post
    4,740
    Blogs
    12
    Ciao Fausto,
    Sono felice di poterti risponderti.
    Per risolvere il tuo problema dovresti ricorrere all'utilizzo di 2 query SQL e non 1. Come ? Ecco qua:

    Con la 1° query SQL selezioni tutte le categorie disponibili. Potresti ricorrere ad una SELECT DISTINCT sulla tabella dei file per selezionare in modo univoco tutte le categorie presenti.

    Con la 2° query, selezioni gli ultimi 2 record inseriti nella tabella file appartenenti alla categoria precedentamente selezionata.

    Una query annidata in un'altra. Tutto qui.

    Es:
    codice:
    <%
    myFirstSQL = "SELECT DISTINCT(categoria) FROM..."
    set rs1 = con.execute(myFirstSQL)
    
    while not rs1.eof
    'prelevi l'id della categoria
    id_cat = rs1("categoria")
    
    'Adesso 2° query e 2° While
    mySecondSQL = "SELECT TOP 2 * FROM file WHERE categoria = " & id_cat
    set rs2 = con.execute(mySecondSQL)
    while not rs2.eof
     'qui prelevi tutti i dati di cui hai bisogno
    rs2.movenext
    wend
    rs2.close
    set rs2 = nothing
    
    rs1.movenext
    wend
    
    rs1.close
    set rs1 = nothing
    %>
    Questo esempio l'ho scritto al volo solo per darti un'idea.
    Non so se funziona... Dovresti modificarlo secondo le tue esigenze.

    A presto,
    Giuseppe Leone

  3. #3
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    mi da un problema sulla riga:set rs1 = oConn.execute(SQL1)
    mi dice:
    Errore di run-time di Microsoft VBScript (0x800A01A8)
    Necessario oggetto


    e non riesco a capire cosa manchi
    a me sembra corretta la sintassi
    l'ho verificata anche con quella di altre stringhe SQL che funzionano perfettamente
    ma dove sbaglio?

    questa e' la pagina intera

    <div align="center">
    <!-- #INCLUDE FILE="../_scripts/connect_db2.inc" -->

    <% SQL1="SELECT DISTINCT (categoria) FROM elencofile"
    set rs1 = oConn.execute(SQL1)

    while not rs1.eof
    'prelevi l'id della categoria
    id_cat = rs1("categoria")

    'Adesso 2° query e 2° While
    SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = " & id_cat
    set rs2 = oConn.execute(SQL2)
    while not rs2.eof

    %>
    <img src='pdf/<%=rs2("percorso")%>' alt='<%=rs2("categoria")%>' height="100" width="150" hight="100" border="0">
    <%
    rs2.movenext
    wend
    rs1.close
    rs2.close
    wend
    set rs1=nothing
    set rs2=nothing
    set oConn=nothing
    %></div>

  4. #4
    Post
    4,740
    Blogs
    12
    Ciao fausto,
    Effettivamente hai confuso il codice che ti ho fornito...
    Se crei all'inizio RS1 lo chiuderai alla fine, come secondo RS2 dovra' essere chiuso prima di RS1.
    Comunque prima di scrivere tutto il codice completo, controlla se funziona il primo ciclo While, *solo ed esclusivamente* con RS1.

    in attesa di riscontri,
    Giuseppe Leone

  5. #5
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    in effetti stamane a mente fresca mi sono accorto del problema
    mancava l'oggetto: Set oConn = GetConn()
    e c'erano pasticci vari
    ora funziona tutto

    ora l'errore e' sicuramente nelle stringhe SQL
    perche' ora la pagina mi restituisce questo:

    Tipi di dati non corrispondenti nell'espressione criterio.
    elenco3.asp, line 16

    riga 15:SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = " & id_cat
    riga 16:set rs2 = oConn.execute(SQL2)

    il problema e' che non riesce a catturare il valore da rs1

    allora ho provato cosi':
    SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = '& id_cat '"

    e cosi'

    SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = 'id_cat '"

    e mi restituiscce solo il codice html senza un errore
    cosi' sono tornato al problema iniziale: non so costruire una stringa sql diversa da quelle che si trovano sui libri

  6. #6
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    ho provato a stampare il risultato delal prima sql
    aggiungendo un

    response.write id_cat

    e il risultato e' corretto le categorie sono presenti

    qualcuno puo' farmi capire come posso recuperare questo valore e inserirlo correttamente nella seconda SQL
    grazie mille
    saluti fausto

  7. #7
    Post
    4,740
    Blogs
    12
    Ciao Fausto,
    Posta il codice completo, provvedero' a farti notare le modifiche da apportare [img]smileys/smiley2.gif[/img]

  8. #8
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    Grazie mille Master85
    ecco il codice completo della pagina:
    <div align="center">
    <!-- #INCLUDE FILE="../_scripts/connect_db2.inc" -->

    <% SQL1="SELECT DISTINCT (categoria) FROM elencofile"
    Set oConn = GetConn()
    set rs1 = oConn.execute(SQL1)

    while not rs1.eof


    'prelevi l'id della categoria
    id_cat = rs1("categoria")

    response.write id_cat

    'Adesso 2° query e 2° While
    SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = '& id_cat'"
    set rs2 = oConn.execute(SQL2)
    while not rs2.eof

    %>
    <img src='pdf/<%=rs2("percorso")%>' alt='<%=rs2("categoria")%>' height="100" width="150" hight="100" border="0">
    <%
    rs2.movenext
    wend
    rs2.close
    set rs2 = nothing


    rs1.movenext
    wend

    rs1.close
    set rs1 = nothing
    set oConn=nothing
    %></div>

  9. #9
    Post
    4,740
    Blogs
    12
    Ciao fausto,
    Ho dato uno sguardo veloce al tuo codice, beh, il meccanismo e' giusto, hai sbagliato a scrivere la seconda query SQL... Troppi apici:

    codice:
    SQL2="SELECT TOP 2 * FROM elencofile WHERE categoria = '& id_cat'"
    Convertila in:

    codice:
    SQL2 = "SELECT TOP 2 * FROM elencofile WHERE categoria = " & id_cat & " ORDER BY myCampo"
    Inoltre, ricordati di ordinarei risultati.

    A presto,
    Giuseppe [img]smileys/smiley2.gif[/img]

  10. #10
    faustonenci non è in linea Novello
    Luogo
    Italy
    Post
    12
    purtroppo continua l'errore:

    Tipi di dati non corrispondenti nell'espressione criterio.

    con questa stringa:
    SQL2 = "SELECT TOP 2 * FROM elencofile WHERE categoria = " & id_cat & " ORDER BY categoria"

    grazie per la disponibilita'
    fausto

+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo

Discussioni simili

  1. [Javascript]Popolare select tramite altro select
    Da Eugene nel forum HTML, CSS, Javascript, AJAX
    Risposte: 4
    Ultimo Post: 25-03-2008, 23:36
  2. Array vuoto. Errore run-time "13" 0 "9"
    Da gmax74 nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 16-05-2006, 14:55
  3. Problema con select
    Da andreathedove nel forum ASP 3.0, ASP .Net
    Risposte: 3
    Ultimo Post: 31-08-2005, 11:21

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi