przejdę od razu do rzeczy:
struktura tabel wygląda następująco:
CREATE TABLE IF NOT EXISTS `documentcontents` ( `docid` int(11) NOT NULL DEFAULT '0', `title` text NOT NULL, `fromdate` int(11) NOT NULL DEFAULT '0', `todate` int(11) NOT NULL DEFAULT '0', `filename` varchar(255) NOT NULL DEFAULT '', `contenttype` varchar(255) NOT NULL DEFAULT '', `md5sum` varchar(32) NOT NULL DEFAULT '', `description` text NOT NULL, UNIQUE KEY `docid` (`docid`), KEY `md5sum` (`md5sum`), KEY `fromdate` (`fromdate`), KEY `todate` (`todate`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; CREATE TABLE IF NOT EXISTS `docreply` ( `id` int(11) NOT NULL AUTO_INCREMENT, `customerid` int(11) NOT NULL, `docid` int(11) NOT NULL, `type` varchar(255) NOT NULL, `value` tinyint(1) NOT NULL, `node` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `docid` (`docid`), KEY `type` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=latin2 ; CREATE TABLE IF NOT EXISTS `documents` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` tinyint(4) NOT NULL DEFAULT '0', `number` int(11) NOT NULL DEFAULT '0', `numberplanid` int(11) NOT NULL DEFAULT '0', `cdate` int(11) NOT NULL DEFAULT '0', `customerid` int(11) NOT NULL DEFAULT '0', `userid` int(11) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `address` varchar(255) NOT NULL DEFAULT '', `zip` varchar(10) NOT NULL DEFAULT '', `city` varchar(32) NOT NULL DEFAULT '', `ten` varchar(16) NOT NULL DEFAULT '', `ssn` varchar(11) NOT NULL DEFAULT '', `paytime` tinyint(4) NOT NULL DEFAULT '0', `paytype` varchar(255) NOT NULL DEFAULT '', `closed` tinyint(1) NOT NULL DEFAULT '0', `reference` int(11) NOT NULL DEFAULT '0', `extnumber` varchar(255) NOT NULL DEFAULT '', `reason` varchar(255) NOT NULL DEFAULT '', `cashvalue` float(6,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`), KEY `cdate` (`cdate`), KEY `numberplanid` (`numberplanid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 ;
Co chcę osiągnąć:
Chcę uzyskać listę osób (tj. adres, name, fromdate, todate) z ich ostatnią wiążącą umową .
Użyłem takiego zapytania:
SELECT d.name, d.address, d.id, d.customerid, dc.docid, dc.fromdate FROM `documents` d INNER JOIN documentcontents dc ON (d.id=dc.docid) WHERE d.id=(SELECT MAX(d.id) FROM documents WHERE customerid=d.customerid) AND dc.fromdate<>0 ORDER BY name ASC , fromdate DESC
Niestety nie wyrzuca wyników, a raczej wklepując go przez phpmyadmin kręci się i kręci i kręci... Czy ja popełniłem gdzieś błąd ?
Zaznaczam , że to nie ja projektowałem bazę ; )
Z góry dzięki za pomoc