CLAUSOLA WHERE CON PIU' PARAMETRI

di il
6 risposte

CLAUSOLA WHERE CON PIU' PARAMETRI

Salve avrei bisogno di un aiuto

Il mio programma inserisce in una listbox degli ID elencati in un tabella mariadb

Dovendo fare un SELECT  con la condizione WHERE filtrante solo ID d'interesse e non sapendo sino all'ultimo quanti e quali siano, esiste un sistema per raggrupparli prima in una variabile e poi passarli alla stringa della query senza fare un'infinita serie di where ... or .. or .. or?

Dim da As New MySqlDataAdapter("SELECT lista FROM 'elencototale' WHERE ID  = '" & variabile & "'",conn)

Forse concatenando la clausola con un ciclo FOR e con  parameters ?

Grazie

6 Risposte

  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    Facci un esempio che si capisc meglio, da quel che ho capito io tu vorresti fare:

    SELECT lista FROM 'elencototale' WHERE ID='01' or ID='02' or ID='03' or ID='04' or ID='05' or ID='06' or ID='07'

    se è così puoi fare:

    SELECT lista FROM elencototale WHERE ID IN ('01', '02', '03', '04', '05', '06', '07');

    (occhio che 'elencototale' non va messo tra apici)

  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    Esatto è proprio quello che intendevo. Però '01' .etc.  dovrò creare prima una stringa ad hoc con un ciclo for per strutturare a seconda dei casi i paramenti da passare giusto? Anche perché se ho un centinaio di indici non posso creare tutte le varianti fisse.

    Ti ringrazio intanto per la cortesia e la disponibilità e farò delle prove. Grazie ancora

  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    Nulla togliendo a quanto suggerito....

    13/04/2026 - ribelle ha scritto:

    Dovendo fare un SELECT  con la condizione WHERE filtrante solo ID d'interesse e non sapendo sino all'ultimo quanti e quali siano, esiste un sistema per raggrupparli prima in una variabile e poi passarli alla stringa della query senza fare un'infinita serie di where ... or .. or .. or?

    questi or da dove li prendi? visto che "non sapendo sino all'ultimo quanti e quali siano".

  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    Se hai un centinaio di ID la stringa diventerà un po' troppo lunga.
    In questo caso ti conviene creare una tabella temporanea, ci inserisci i tuoi ID da cercare (con un ciclo for o altra cosa) e poi incroci le due tabelle,
    ad esempio:

    -> creazione della tabella
    CREATE TABLE #IDdaCercare (ID VARCHAR(10))
    -> inserimento dei valori da cercare
    INSERT INTO #IDdaCercare (ID) VALUES ('01')
    INSERT INTO #IDDaCercare (ID) VALUES ('02')
    INSERT INTO #IDDaCercare (ID) VALUES ('03'), ('04'), ('05'), ('06'), ('07')
    -> eccetera eccetera

    adesso per estrarre i dati puoi fare:

    SELECT elencototale.lista 
    FROM elencototale 
    INNER JOIN #IDdaCercare ON elencototale.ID = #IDdaCercare.ID

    oppure

    SELECT lista 
    FROM elencototale 
    WHERE ID IN (SELECT ID FROM #IDdaCercare)

    mi raccomando il campo ID (sia su "elencototale" sia su "#IDdaCercare") che abbia un indice, possibilmente univoco

    anche se SQL cancella le tabelle temporanee non appena chiudi la sessione o la connessione, sarebbe una buona norma cancellarla quando non ti serve più

    DROP TABLE #IDdaCercare
  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    14/04/2026 - SirJo ha scritto:

    Se hai un centinaio di ID la stringa diventerà un po' troppo lunga.

    Volevo arrivare a questo...

  • Re: CLAUSOLA WHERE CON PIU' PARAMETRI

    Grazie ancora a tutti 

    ho provato una soluzione che sembra stia funzionando

    Cliccando un pulsante  da una listview aggiunge gli elementi mano mano scelti ad una seconda listview.

    Ogni volta che ne aggiunge uno concatena anche la stringa degli ID che mi serve alla fine.

    Testerò comunque agli altri metodi suggeriti. Grazie ancora di tutto.

     Private Sub BtnAggiungi_Click(sender As Object, e As EventArgs) Handles BtnAggiungi.Click
    Dim parziale as string
    DIm finale as string
    
    For Each item As ListViewItem In ListView1.SelectedItems
        
        ' Clona l'elemento e lo aggiunge alla seconda ListView
        ListView2.Items.Add(CType(item.Clone(), ListViewItem))
        
    
        ' Seleziona subitem(1) ovvero campo ID e lo concatena ad ogni ciclo FOR ... NEXT
        parziale = parziale & "'" & item.SubItems(1).Text & "', "
        ' risultato finale esempio '01', '02', '03', '04', 
        
       ' Elimina la virgola e lo spazio alla fine dalla stringa per passarla alla successiva query con  - WHERE ID IN (" & finale & ") - 
        finale = parziale.Substring(0, parziale.Length - 2)
        'risultato finale esempio '01', '02', '03', '04'
    Next
    End Sub
    
Devi accedere o registrarti per scrivere nel forum
6 risposte