Printing a drop down menu for a specific field.
Nick the Gr33k
nikos.gr33k at gmail.com
Sat Oct 26 19:31:33 EDT 2013
Στις 26/10/2013 9:33 μμ, ο/η rurpy at yahoo.com έγραψε:
> On 10/20/2013 05:30 PM, Νίκος Αλεξόπουλος wrote:
>> try:
>> cur.execute( '''SELECT host, city, useros, browser, ref, hits,
>> lastvisit FROM visitors WHERE counterID = (SELECT ID FROM counters WHERE
>> url = %s) ORDER BY lastvisit DESC''', page )
>> data = cur.fetchall()
>>
>> for row in data:
>> (host, city, useros, browser, ref, hits, lastvisit) = row
>> lastvisit = lastvisit.strftime('%A %e %b, %H:%M')
>>
>> print( "<tr>" )
>> for item in (host, city, useros, browser, ref, hits, lastvisit):
>> print( "<td><center><b><font color=white> %s </td>" % item )
>> except pymysql.ProgrammingError as e:
>> print( repr(e) )
>> ===========================================
>>
>> In the above code i print the record of the mysql table visitors in each
>> row like this: http://superhost.gr/?show=log&page=index.html
>>
>> Now, i wish to write the same thing but when it comes to print the
>> 'lastvisit' field to display it in a <select></select> tag so all prior
>> visits for the same host appear in a drop down menu opposed to as i have
>> it now which i only print the datetime of just the latest visit of that
>> host and not all its visit datetimes.
>
> Perhaps something like this is what you are looking for?
>
>> try:
>> cur.execute( '''SELECT host, city, useros, browser, ref, hits,
>> lastvisit FROM visitors WHERE counterID = (SELECT ID FROM counters WHERE
>> url = %s) ORDER BY lastvisit DESC''', page )
>> data = cur.fetchall()
>>
> newdata = coalesce( data )
> for row in newdata:
> (host, city, useros, browser, ref, hits, visits) = row
> # Note that 'visits' is now a list of visit times.
> print( "<tr>" )
> for item in (host, city, useros, browser, ref, hits):
> print( "<td><center><b><font color=white> %s </td>" % item )
> print( "<td><select>" )
> for n, visit in enumerate (visits):
> visittime = visit.strftime('%A %e %b, %H:%M')
> if n == 0: op_selected = 'selected="selected"'
> else: op_selected = ''
> print( "<option %s>%s</option>" % (op_selected, visittime) )
> print( "</select></td>" )
> print( "</tr>" )
>
> def coalesce (data):
> '''Combine multiple data rows differing only in the 'hits' and
> 'visits' fields into a single row with 'visits' changed into a
> list of the multiple visits values, and hits changed into the
> sum of the multiple 'hits' values. Order of rows is preserved
> so that rows with most recent visits still come first.'''
>
> newdata = []
> seen = {}
> for host, city, useros, browser, ref, hits, visit in data:
> # Here you have to decide how to group the rows together.
> # For example, if you have
> # 178-20-236.static.cyta.gr | Europe/Athens | Windows | Explorer | Direct Hit | 1 | Παρασκευή 25 Οκτ, 20:48
> # 178-20-236.static.cyta.gr | Europe/Athens | Windows | Explorer | Direct Hit | 3 | Παρασκευή 25 Οκτ, 20:06
> # do you want those as one row on the html page, or two?
> # If one, what value do you want to show for 'hits' (Επανάληψη)?
> # "1", "3", "4"?
> # I'll assume that you want an html row for every unique
> # combination of (host, city, useros, browser) and that hits
> # should be summed together.
> key = host, city, useros, browser, ref
> if key not in seen:
> newdata.append ([host, city, useros, browser, ref, hits, [visit]])
> seen[key] = len (newdata) - 1 # Save index (for 'newdata') of this row.
> else: # This row is a duplicate row with a different visit time.
> rowindex = seen[key]
> newdata[rowindex][5] += hits
> newdata[rowindex][6].append (visit)
> return newdata
>
> Several caveats...
> The code above is untested, you'll probably have to fix some errors
> but hopefully it is clear enough.
> I only read this group intermittently these days so it you respond
> with question about the code, or need more help, it is likely I
> will not see your message so don't be surprised if you don't get an
> answer.
>
> Hope this is more helpful than the other answers you got.
Thank you very much Rurpy, i appreciate your help very much.
Even of you havent tested it your code runs flawlessly.
Only 1 side effect.
If visitor comes from a referrer link then the visit[] list doesn't not
add its timestamp into it.
It only adds it in case of a direct hit when there is no referer present.
--
What is now proved was at first only imagined! & WebHost
<http://superhost.gr>
More information about the Python-list
mailing list