sql

Honza Pazdziora adelton na informatics.muni.cz
Sobota Květen 11 13:40:09 CEST 2002


On Fri, May 10, 2002 at 10:24:02PM -0400, Petr Vanek wrote:
> 
> mám tabulku, do které ukládám 'session' čtenářů webu a z ní pak
> zobrazuji informaci 'penguina si momentálně čte xx lidí'. přemýšlel
> jsem, zda by se dal z tabulky vytáhnout údaj, kolik bylo v jednom
> okamžiku nejvíce současně připojených lidí.
> 
> tabulka vypadá takto:
> 
> mysql> show columns from send;
> +----------+-------------+------+-----+---------+-------+
> | Field    | Type        | Null | Key | Default | Extra |
> +----------+-------------+------+-----+---------+-------+
> | ip       | varchar(15) |      | PRI |         |       |
> | lastsend | int(11)     |      |     | 0       |       |
> | id       | int(11)     |      | PRI | 0       |       |
> +----------+-------------+------+-----+---------+-------+
> 
> a příklad záznamu:
> 
> mysql> select * from send limit 5;
> +----------------+------------+-----+
> | ip             | lastsend   | id  |
> +----------------+------------+-----+
> | 216.208.56.130 | 1020998002 |   0 |
> | 216.208.56.130 | 1020988395 | 470 |
> | 62.84.129.157  | 1021083187 |   0 |
> | 195.12.148.108 | 1020988563 | 585 |
> | 212.20.112.134 | 1020989058 | 585 |
> +----------------+------------+-----+
> 5 rows in set (0.02 sec)
> 
> 
> já počítám za přihlášeného člověka toho, kdo tam je do deseti minut, nad
> deset minut je off. to sql by tím pádem muselo využít nějakého limitu,
> který by byl ale proměnlivý..., seskupit to, seřadit...je toto vůbec
> proveditelné?

Počet zaznamů v posledních deseti minutách získáte pro každý čas
v lastsend (nemá to být sent a lastsent?) joinem

	select a.lastsend, count(*) pocet
	from send a, send b
	where b.lastsend <= a.lastsend
		and b.lastsend > a.lastsend - 10 * 60
	group by a.lastsend

(Teda, je možné, že id 0 znamená, že ještě nemá přiděleno session id,
v tom případě je potřeba takové z toho selectu vyhodit, či co.)

Normálně byste nad tímhle udělal další subselect a vzal byste z toho
max(pocet). Protože ale z formátu těch výpisů vyvozuji, že používáte
MySQL, budete to muset nacpat do pomocné tabulky nebo ty hodnoty
vytahat ven do procedurálního klientského prostředí a to maximum si
napočítat ručně.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Test