Discussione chiusa
Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Query mysql annidata

  1. #1
    L'avatar di queen_live78
    queen_live78 non è in linea Scribacchino
    Luogo
    Italy
    Post
    522

    Smile Query mysql annidata

    Salve a tutti sto cercando di eseguire una query annidata prelevando dei dati da una tabella mysql e mostrandoli in una list view, fin qui nessun problema avrei, alcuni dati che recupero fanno riferimento agli id presenti in un altra tabella ancora pertanto avrei la neccessità una volta recuperato l'id di recuperare da un altra tabella il nome relativo e mostrarlo contemporaneamente nella listview, dovrei eseguire un doppio ciclo ma non riesco ad impostarlo.. questo è il mio codice:


    If (CNN.State = adStateOpen) Then
    query = "SELECT * FROM jqb_mag_inv_archivioutenti"
    rs.Open query, CNN


    ListView1.ListItems.Clear
    Do While Not (rs.EOF) 'Esegue il ciclo fino alla fine
    List1.AddItem rs("idUtenti") & " - " & rs("NOMINATIVO")
    List1.ItemData(List1.NewIndex) = rs("idUtenti")
    temp0 = rs("idUtenti")
    temp1 = rs("NrGRADO")
    temp2 = rs("NOMINATIVO")











    rs.MoveNext 'Passa al record successivo




    Dim LI As MSComctlLib.ListItem
    Set LI = ListView1.ListItems.Add(, , temp0)
    LI.SubItems(1) = temp1
    LI.SubItems(2) = temp2














    Loop



    ListView1.BorderStyle = ccFixedSingle
    ListView1.View = lvwReport
    ListView1.GridLines = True
    ListView1.FullRowSelect = True

    ListView1.ColumnHeaders(1).Width = 400
    ListView1.ColumnHeaders(2).Width = 4950
    ' ListView1.ColumnHeaders(3).Width = 1200





    'ListView1.ListItems.add




    End If


    Set rs = Nothing


    recuperato l'id all'interno del ciclo stesso dovrei inserire un altro ciclo che porta alla tabella gradi tipo questo :

    'query2 = "SELECT * FROM jqb_mag_inv_gradi where codice_grado = '" & temp1 & "'"
    'rs.Open query2, CNN

    'Nomegrado = rs("grado")

    cosi da mostrare in list view al posto dell'id recuperato dalla tabella il nome prelevato dalla seconda... un aiuto ?
    Federico
    JQooBe Fouder

  2. #2
    Ferrari_and non è in linea Scolaretto
    Post
    116
    Ciao Fondi le 2 select con un inner join e recuperi tutti i dati in con una query.
    Non conoscendo le tabelle non riesco a farti un esempio ma se cerchi inner join tra i comandi dell SQL non dovresti avere problemi.

  3. #3
    L'avatar di queen_live78
    queen_live78 non è in linea Scribacchino
    Luogo
    Italy
    Post
    522
    potresti farmi un esempio pratico
    Federico
    JQooBe Fouder

  4. #4
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    309
    Qui trovi degli esempi.

  5. #5
    L'avatar di queen_live78
    queen_live78 non è in linea Scribacchino
    Luogo
    Italy
    Post
    522
    si ho visto ma non riesco a capire come adattare la situazione sopra con questa :

    SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
    FROM ((Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

    io ho una tabella chiamata jqb_mag_inv_archivioutenti

    da cui recupero IdUtenti,ID_Grado, Nominativo



    query = "SELECT * FROM jqb_mag_inv_archivioutenti"
    rs.Open query, CNN


    ListView1.ListItems.Clear
    Do While Not (rs.EOF) 'Esegue il ciclo fino alla fine
    List1.AddItem rs("idUtenti") & " - " & rs("NOMINATIVO")
    List1.ItemData(List1.NewIndex) = rs("idUtenti")
    temp0 = rs("idUtenti")
    temp1 = rs("ID_Grado")
    temp2 = rs("NOMINATIVO")

    Nella listview mi vengono mostrati tutti i records precisamente:

    IdUtenti | Id_Grado | Nominativo

    fin qui tutto funziona .. ora io al posto di ID_Grado vorrei recuperare da un altra tabella il corrispondente nome passando l'id_grado..

    per poi mostrarlo al posto del valore numerico..

    Non so se mi son spiegato bene..
    Federico
    JQooBe Fouder

  6. #6
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    309
    codice:
    query = "SELECT * FROM jqb_mag_inv_archivioutenti"
    Qui modificherai la query secondo il suggerimento di Ferrari_and, aggiungendo la clausola INNER JOIN. Purtroppo senza la struttura delle tabelle diventa difficile aiutarti.
    P.S. Come da regolamento usa i tag CODE per il codice o i moderatori potrebbero chiuderti la discussione.

  7. #7
    Ferrari_and non è in linea Scolaretto
    Post
    116
    La tua query dovrebbe essere all'incirca questa

    SELECT jqb_mag_inv_archivioutenti.idUtenti, jqb_mag_inv_archivioutenti.NrGRADO, jqb_mag_inv_archivioutenti.NOMINATIVO, jqb_mag_inv_gradi.grado
    FROM jqb_mag_inv_archivioutenti
    INNER JOIN jqb_mag_inv_gradi
    ON jqb_mag_inv_archivioutenti.NrGRADO = jqb_mag_inv_gradi.codice_grado

    Ho ricavando i nomi dei campi e i nomi delle tabelle dalla prima bozza del programma. I nomi tabella spero di averli copiati giusti.
    La query non molto è difficile e in un corso base di sql o tuttorial dovresti trovarla spiegata bene.

    Se mastichi un po l'inglese prova a vedre qui https://www.w3schools.com/sql/

  8. #8
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,851
    Buonasera,
    avete mai sentito dire che i frammenti di codice devono essere postati facendo uso degli appositi tag?
    Questa discussione si chiude e la stessa sorte toccherà ad altre che non rispettano le raccomandazioni del regolamento.
    Il regolamento del forum: la prima cosa da leggere.

Discussione chiusa

Tag per questa discussione

Permessi di invio

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