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ì :
Poi vorrei incrementare il campo CONTATORE degli articoli selezionati, in modo tale che prende le notizie con meno VISUALIZZAZIONI.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")
Creo una lista NEWS e per aumentare il CONTATORE faccio così (anche se non mi funziona)
Le ho provate tutte da List(of Int16) ad array ecc ecc, se al posto di @LISTA metto (30,31) allora fa l'UPDATE.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()
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

					
					
					
						
  Rispondi quotando
 ) . Penso in generale di aver letto non sia posibile eseguire un update sulla stessa select ed evidenziare i campi.
						