Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1

    Fare Update tabA dopo Select TabA in aspx

    Buongiorno a Tutti,
    volevo creare una soluzione elegante con una sola Query in sql server.
    In una tabella NEWS seleziono le prime 5 notizie che hanno meno visualizzazioni(CONTATORE) così :
    codice:
       Sqlmia.Append("Select")                If Massimo <> 0 Then
                        Sqlmia.Append(" TOP (" & Massimo & ") * ")
                    Else
                        Sqlmia.Append(" * ")
                    End If
    
    
                    Sqlmia.Append(" From Tabnews WHERE (Visibile=1 AND (GETDATE() BETWEEN datainizio AND datafine) ) Order By Contatore ASC")
    Poi vorrei incrementare il campo CONTATORE degli articoli selezionati, in modo tale che prende le notizie con meno VISUALIZZAZIONI.

    Creo una lista NEWS e per aumentare il CONTATORE faccio così (anche se non mi funziona)

    codice:
     Dim cmd As New SqlCommand(Sqlmia.ToString, Conn)                '    Dim Listy As New List(Of Int16)
                    Dim Listay As New ArrayList
                    Using RDR = cmd.ExecuteReader()
                        If RDR.HasRows Then
                            Do While RDR.Read
    
    
                                Dim g As New LcNews
                                g.Idx = RDR.Item("ID")
                                If (RDR.Item("Cat2") = Nothing) Or (RDR.Item("Cat2")) = "NESSUNA" Then
                                    g.Cat1 = " Categoria : " & RDR.Item("Cat1")
                                ElseIf (RDR.Item("Cat1") = Nothing) Or (RDR.Item("Cat1")) = "NESSUNA" Then
                                    g.Cat1 = " Categoria : " & RDR.Item("Cat2")
                                Else
    
    
                                    g.Cat1 = " Categorie : " & RDR.Item("Cat1") & " " & RDR.Item("Cat2")
                                End If
                                g.Testoarticolo = RDR.Item("TEsto")
                                g.Titolo = RDR.Item("Titolo")
                                g.Di = RDR.Item("dataInizio")
                                g.Datacreato = RDR.Item("DataCreato")
                                ListaX.Add(g)
                                '        Listy.Add(g.Idx)
                                Listay.Add(g.Idx)
                            Loop
    
    
                        End If
                    End Using
    
    
                    Sqlmia.Clear()
    
    
                    Sqlmia.Append("UPDATE  TabNews SET impressions +=1 where id IN (@Lista)")
                   
                    cmdr.Parameters.AddWithValue("@lista", Listay.ToArray)
    
    
    
    
                    cmdr.ExecuteNonQuery()
    Le ho provate tutte da List(of Int16) ad array ecc ecc, se al posto di @LISTA metto (30,31) allora fa l'UPDATE.
    Siccome è troppo confussionario come codice, c'è modo di creare un'unica SQL per selezionare ed incrementare il CONTATORE di quegli ID articoli? Ho provato con Inner Join , LEFT ecc ecc ma nada.

    Grazie a tutti
    Riccardo Rossi - Smart Agent 3

    GENIALTEK il tuo sito presto e bene
    www.genialtek.it

  2. #2
    1. va indicato il db con cui stai lavorando, come da regolamento
    2. elegante e efficace non vanno d'accordo, sfatiamo questo mito che la query unica è il top!
    3. sinceramente non ho capito cosa vuoi fare e cosa rappresenta il contatore di cui parli
    grassie

  3. #3
    Ciao,
    giusto il db è sqlserver, praticamente in una tabella ci sono le news con un "contatore" che aumenta ogni volta che si visualizza, volevo creare una unica query che selezionasse le news ed incrementasse il contatore.
    al momento ho risolto così:
    tutto l'altro codice è nel post sopra. Per fare l'update :
    codice:
       Sqlmia.Clear()
                    Dim Lista As String = ""
                    For i = 0 To Listy.Count - 1
                        If i = 0 Then
                            Lista = Listy.Item(i).ToString()
                        Else
                            Lista &= "," & Listy.Item(i).ToString()
                        End If
    
    
                    Next
                    Dim ListaID = Lista & ")"
                    Sqlmia.Append("UPDATE  TabNews SET impressions +=1 where id IN (" & listaID)
                    Dim cmdr As New SqlCommand(Sqlmia.ToString, Conn)
    
    
                    cmdr.ExecuteNonQuery()
    Ma penso che la soluzione migliore sia creare una tabella a parte ed inserire il contatore (ed altre info) .
    Riccardo Rossi - Smart Agent 3

    GENIALTEK il tuo sito presto e bene
    www.genialtek.it

  4. #4
    qualcosa del tipo

    UPDATE tabella_news SET contatore=contatore+1 WHERE id IN (SELECT TOP 5 id FROM tabella_news ORDER BY contatore ASC)

    ???

  5. #5
    Ciao grazie intanto per le risposte,
    come sql funziona , però devo anche estrerre i campi della tabella come titolo , articolo ecc ecc, questa che hai postato fa giustamente l'update degli ID selezionati, però non estrapola e visualizza i campi (la mi fregatura è quella ) . Penso in generale di aver letto non sia posibile eseguire un update sulla stessa select ed evidenziare i campi.
    Riccardo Rossi - Smart Agent 3

    GENIALTEK il tuo sito presto e bene
    www.genialtek.it

  6. #6
    ? non capisco a cosa ti servano gli altri campi... la tua esigenza non era solo quella di aggiornare il contatore delle 5 pagine meno visitate?

  7. #7
    Purtroppo mi servono perchè visualizzo i campi come titolo, articolo ecc , contemporaneamente aumento il contatore.
    Riccardo Rossi - Smart Agent 3

    GENIALTEK il tuo sito presto e bene
    www.genialtek.it

  8. #8
    select ...
    fai quello che vuoi
    update degli id della select eseguita prima
    that easy!

  9. #9
    Ciao, ma purtroppo è proprio questo che non riesco a fare
    Riccardo Rossi - Smart Agent 3

    GENIALTEK il tuo sito presto e bene
    www.genialtek.it

  10. #10
    Ti stai perdendo in un bicchier d’acqua. Nella SELECT sicuramente usi una WHERE. Quella stessa WHERE la usi per l’UPDATE. L’istruzione te l’ho già scritta prima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.