Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di billy1
    Registrato dal
    Jun 2001
    Messaggi
    549

    ASP - vorrei mostrare ogni giorno (per 24 ore) 4 record diversi, da scegliere tra 10.

    ciao,

    ho una tabella con 10 record (per esempio).

    Ogni record e' un nome di una citta'.

    Vorrei, in una pagina ASP, oggi mostrare 4 nomi di citta', domani altre 4 , dopodomani le 2 rimanenti piu' altre 2 che sono state gia' viste una sola volta, e cosi' via.

    In modo che poi pian piano tutte e 10 avranno lo stesso numero di volte in cui sono state viste, man mano che passano i giorni/mesi

    Esempio :


    io ho queste 10 citta' :
    Atene, Praga, vienna, Budapest, roma, milano, berlino, monaco, madrid, barcellona

    oggi mostrare per es. :
    Atene, Praga, vienna, Budapest

    domani :
    roma, milano, berlino, monaco

    dopodomani :
    madrid, barcellona, atene budapest

    e cosi' via... tra tre giorni quindi mostrare altre 4 citta' che sono state viste solo 1 volta, e cosi' via.


    Io ho pensato di mettere un contatore e incrementarlo ogni volta che (per 24 ore), viene scelta e visualizzata la citta')


    Il problema e' che l'elenco di 4 citta' deve cambiare ogni giorno, e rimanere per 24 ore


    come potrei fare per questo ultimo punto ?

    grazie
    Il fumo fa male a te e agli altri.
    Rispettate chi non vuole respirare il fumo passivo.

  2. #2
    Puoi agire così:
    Crei una tabella "citiesOfTheDay" con i campi CityID (numerico) e Today (data/ora).
    Ad ogni accesso al sito controlli che la tabella contenga record con la data ordierna,.

    Se non ci sono record con la data ordierna, allora fai una query sulla tua tabella città prendendo le città il cui ID non è presente sulla tabella citiesOfTheDay:
    codice:
    sql = "SELECT CityID FROM citiyes WHERE CityID NOT IN (SELECT CityID FROM citiesOfTheDay)"
    Questa query ti restituirà gli ID della tabella cities NON presenti in quella citiesOfTheDay.

    -Se non restituisce alcun ID allora vorrà dire che per questo giro tutte le città sono state viste almeno una volta, quindi, fai una delete di tutto nella tabella citiesOfTheDay e riavvii l'algoritmo.

    - Se gli ID sono più di 4 allora devi prenderne solo 4. Li carichi tutti in un array e con una funzione random crei per 4 volte (con un ciclo) l'identificativo univoco dell'indice dell'array che contiene un ID da selezionare.
    Selezionato l'ID lo salvi nella tabella citiesOfTheDay con la data odierna.

    Se ci sono record con la data odierna allora non fai nulla.

    Sembra complicato, ma non lo è.
    Ovviamente, nella tabella citiesOfTheDay hai solo gi ID delle città. I dati li prendi dalla tabella cities facendo una JOIN tra le due tabelle.

  3. #3
    Utente di HTML.it L'avatar di billy1
    Registrato dal
    Jun 2001
    Messaggi
    549

    ok

    ok devo leggerla bene perche' sono convinto che funzioni ma devo metabolizzarla bene...


    Se invece volessi creare fisicamente ogni giorno a mezzanotte una pagina htm che contiene 4 citta' a rotazione ?

    cioe' invece di fare il controllo ad ogni accesso della pagina asp, io creo fisicamente (so come fare a creare fisicamente in asp una pagina htm) tale pagina con 4 citta', poi domani idem, creo la stessa pagina con altre 4 citta', e cosi' via...

    se volessi fare cosi' potrebbe essre piu' semplice con meno controlli asp ?
    Il fumo fa male a te e agli altri.
    Rispettate chi non vuole respirare il fumo passivo.

  4. #4
    Allora, io nel mio db sql server ho creato 2 tabelle:

    citiesOfTheDay
    cityID - int (sarebbe il numerico di Access)
    today - varchar(8) (sarebbe testo di lunghezza 8 di Access)

    cities
    cityID - int Identity (sarebbe il contatore di Access)
    cityName - varchar(100) (sarebbe il testo di Access)
    ' puoi mettere tutti gli altri campi qui di seguito

    La tabella cities l'ho popolata così:
    codice:
    	1	Roma
    	2	Milano
    	3	Napoli
    	4	Firenze
    	5	Venezia
    	6	Verona
    	7	Palermo
    	8	Cagliari
    	9	Torino
    	10	Genova
    Nell'esempio, come ho detto prima, uso SQL Server.
    Se usi ACCESS devi cambiare la riga in rosso mettendo la tua stringa di connessione e aggiungere un asterisco * dopo DELETE nelle riga in verde.
    codice:
    <%
    session.LCID = 1040
    
    set conn = server.createObject("ADODB.Connection")
    conn.open "Provider=sqloledb; " &_
              "Network Library=DBMSSOCN; " &_
              "Encrypt=yes;" &_
              "Data Source=localhost;" &_
              "Initial Catalog=xxxxxx;" &_
              "User Id=xxxxxx;" &_
              "Password=xxxxxx;"
    
    today = dateToString(date())
    ' today = dateToString("01/06/2007") ' per fare i test decommentare questa riga e modificare a mano la data tra le parentesi
    maxValue = 4
    
    function dateToString(theDate)
    	if not isDate(theDate) then theDate = date()
    	yyyy = datePart("yyyy",theDate)
    	mm = datePart("m",theDate)
    	if mm < 10 then mm = "0" & mm
    	dd = datePart("d",theDate)
    	if dd < 10 then dd = "0" & dd
    	dateToString = yyyy & mm & dd	
    end function
    
    function citiesOfTheDayAlreadyExists(theDate)
    	sql = "SELECT cityID FROM citiesOfTheDay WHERE today = '" & theDate & "'"
    	set rs = conn.execute(sql)
    		if not rs.eof then
    			citiesOfTheDayAlreadyExists = true
    		else
    			citiesOfTheDayAlreadyExists = false
    		end if
    	rs.close
    	set rs = nothing
    end function
    
    function getCitiesOfTheDay(byRef theArrayID)
    	sql = "SELECT cityID FROM cities WHERE cityID NOT IN (SELECT cityID FROM citiesOfTheDay)"
    	set rs = conn.execute(sql)
    		if not rs.eof then
    				do until rs.eof					
    					theArrayID = theArrayID & "," & rs("cityID")
    					rs.moveNext
    				loop				
    		else
    				call initializeCitiesOfTheDay(theArrayID)
    		end if
    	rs.close
    	set rs = nothing
    end function
    
    function initializeCitiesOfTheDay(tempArrayID)
    	sql = "DELETE FROM citiesOfTheDay"
    	conn.execute(sql)
    	call getCitiesOfTheDay(tempArrayID)
    end function
    
    function randomizeCities(theArrayID,theMaxValue,theDate)
    	dim tempArray()
    	i = 0
    	reDim tempArray(i)
    	while not i = theMaxValue
    		idExists = false
    		randomize()
    		randomNumber = int(rnd * uBound(theArrayID) + 1)
    		tmp = theArrayID(randomNumber)
    			for x = 0 to uBound(tempArray)
    				if tmp = tempArray(x) then idExists = true: exit for
    			next
    			if not idExists then
    				reDim preserve tempArray(i)				
    				tempArray(i) = tmp
    				i = i + 1
    			end if
    	wend
    	for y = o to uBound(tempArray)
    		call storeCitiesOfTheDay(tempArray(y),theDate)
    	next
    end function
    
    function storeCitiesOfTheDay(theCityID,theDate)
    	sql = "INSERT INTO citiesOfTheDay(cityID,Today) VALUES(" & theCityID & ", '" & theDate & "')"
    	conn.execute(sql)
    end function
    
    function main()
    	if not citiesOfTheDayAlreadyExists(today) then
    		call getCitiesOfTheDay(arrayID)
    		if inStr(arrayID,",") > 0 then arrayID = split(arrayID,",")
    		if isArray(arrayID) then
    			if uBound(arrayID) < maxValue then
    				for z = 1 to uBound(arrayID)
    					call storeCitiesOfTheDay(arrayID(z),today)
    				next				
    			else
    				call randomizeCities(arrayID,maxValue,today)
    			end if
    		end if
    	end if
    end function
    
    main()
    %>      
    <html>
    	<head>
    		<title>Titolo Pagina</title>
    	</head>
    	<body>
    		<%
    			sql = "SELECT * FROM cities A INNER JOIN citiesOfTheDay B ON B.cityID = A.cityID WHERE B.Today = '" & today & "'"
    			set rs = conn.execute(sql)
    				if not rs.eof then
    					do until rs.eof
    						response.write rs("cityName") & "
    "
    						rs.moveNext
    					loop
    				end if
    			rs.close
    			set rs = nothing
    		%>
    	</body>
    </html>
    <%  
    conn.close
    set conn = nothing
    %>

  5. #5
    Utente di HTML.it L'avatar di billy1
    Registrato dal
    Jun 2001
    Messaggi
    549

    perfetto

    perfetto, ottimo, grazie mille, ora lo testo ma sembra veramente ok !!!
    Il fumo fa male a te e agli altri.
    Rispettate chi non vuole respirare il fumo passivo.

  6. #6
    Ovviamente il terzo giorno saranno solo 2 le città visualizzate.

  7. #7
    Utente di HTML.it L'avatar di billy1
    Registrato dal
    Jun 2001
    Messaggi
    549

    ok

    ok e per eventualmente fare apparire, oltre che alle 2 rimanenti, anche altre 2 che sono apparse 1 sola volta e' un casino ?

    in modo da averne sempre 4
    Il fumo fa male a te e agli altri.
    Rispettate chi non vuole respirare il fumo passivo.

  8. #8
    Mettine 12, oppure falle ruotare a 5.
    Modiifca la variabile maxValue

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 © 2026 vBulletin Solutions, Inc. All rights reserved.