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