saren_as
12.09.2008, 14:06:58
Witam!
Kombinuje, czytam i mimo to jestem za glopi na wyswietlenie tego co chce. Mam baze danych i trzy interesujace mnie tabele i takie dwa zapytania:
SELECT vserver_ip FROM vservers_status
JOIN vroots
ON vservers_status.vserver_ip = vroots.vid
WHERE vroots.existing = '1';
SELECT MAX(fs_usage)
FROM filers;
Jak z tego wyswietlic wszytkie vserver_ip, ktore spelniaja warunek z pierwszego oraz drugiego zapytania?
Chce to zrobic przez while (ewentualnie prosze tez o ukazanie mi jak by wygladalo jedno zlaczone zapytanie sql - wiem ze UNION ale nie wychodzi mi to jakos)
webasek
12.09.2008, 14:39:20
Może być union a może być łatwiej co to za tabela filers i jak ona się ma do tabeli vservers_status lub tabeli vroots?
saren_as
12.09.2008, 14:47:04
CREATE TABLE `filers` (
`filer_id` int(10) unsigned NOT NULL auto_increment,
`mount_point` varchar(255) NOT NULL default '',
`hostname` varchar(50) NOT NULL default '',
`production` tinyint(1) NOT NULL default '0',
`running` tinyint(1) NOT NULL default '0',
`fs_size` int(10) unsigned NOT NULL default '0',
`fs_usage` int(10) unsigned NOT NULL default '0',
`mem_size` int(10) unsigned default NULL,
`mem_usage` int(10) unsigned default NULL,
PRIMARY KEY (`filer_id`)
) TYPE=MyISAM;
CREATE TABLE `vroots` (
`vid` varchar(15) NOT NULL default '',
`filer` varchar(100) NOT NULL default '',
`xid` int(10) unsigned default NULL,
`existing` tinyint(1) NOT NULL default '0',
`count_idx` int(10) unsigned NOT NULL default '0',
`dist` varchar(100) default NULL,
`dist_ver` int(11) default NULL,
PRIMARY KEY (`vid`,`filer`),
UNIQUE KEY `index02` (`xid`,`filer`),
KEY `index01` (`vid`,`filer`,`existing`)
) TYPE=MyISAM;
CREATE TABLE `vservers_status` (
`vserver_ip` varchar(15) NOT NULL default '',
`filer_id` int(10) unsigned NOT NULL default '0',
`node_id` int(10) unsigned default NULL,
`started` tinyint(1) NOT NULL default '0',
`cpu_parts` int(10) unsigned NOT NULL default '0',
`cpu_usage` int(10) unsigned NOT NULL default '0',
`mem_size` int(10) unsigned default NULL,
`mem_usage` int(10) unsigned NOT NULL default '0',
`disk_size` int(10) unsigned default NULL,
`disk_usage` int(10) unsigned NOT NULL default '0',
`net_usage` bigint(20) unsigned NOT NULL default '0',
`_net_last` bigint(20) unsigned NOT NULL default '0',
`mem_usage_as` int(10) unsigned NOT NULL default '0',
`mem_size_as` int(10) unsigned NOT NULL default '0',
`net_usage_down` bigint(20) unsigned NOT NULL default '0',
`_net_last_down` bigint(20) unsigned NOT NULL default '0',
`net_usage_up` bigint(20) unsigned NOT NULL default '0',
`_net_last_up` bigint(20) unsigned NOT NULL default '0',
`date_created` datetime default NULL,
`last_modified` timestamp(14) NOT NULL,
PRIMARY KEY (`vserver_ip`),
UNIQUE KEY `index01` (`vserver_ip`)
) TYPE=InnoDB;
Tak to wyglada.
webasek
12.09.2008, 14:53:40
Zapytanie sql może wyglądać tak:
SELECT vserver_ip FROM vservers_status JOIN vroots ON vservers_status.vserver_ip = vroots.vid
WHERE vroots.existing = '1' AND filer_id IN (SELECT MAX(fs_usage)
FROM filers)
o in możesz poczytać
tutaj
saren_as
12.09.2008, 15:01:04
Nie wyskakuje mi zaden rekord, a napewno sa takie, ktore spelniaja wszystkie warunki. Mozesz jeszcze raz na to spojrzec:)
Dzieki za zainteresowanie!