0
选择记录和检查总和我有一个表KIOSKSQL查询:在连接表
CREATE TABLE IF NOT EXISTS `kiosk` (
`id` varchar(40) NOT NULL,
`netId` varchar(40) NOT NULL,
`name` varchar(255) NOT NULL,
`countryId` varchar(40) NOT NULL,
`cityId` varchar(40) NOT NULL,
`address` varchar(255) NOT NULL,
`lat` varchar(50) NOT NULL,
`long` varchar(50) NOT NULL,
`venue` varchar(255) NOT NULL,
`impressions` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
和一张桌子PLACEMENT
CREATE TABLE IF NOT EXISTS `placement` (
`id` varchar(40) NOT NULL,
`userId` varchar(40) NOT NULL,
`adId` varchar(40) NOT NULL,
`duration` int(11) NOT NULL,
`kioskId` varchar(40) NOT NULL,
`zoneId` varchar(40) NOT NULL,
`dateBegin` int(11) NOT NULL,
`dateEnd` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
展示位置意味着对信息亭发布广告。 每个展示位置都有一个持续时间和开始和结束发布的日期。 允许在一个自助服务终端上编辑一个240秒的不同广告块,这块 块将在白天一次又一次旋转。
现在我需要选择具有足够时间的特定城市的广告亭来添加广告。
正如我所看到的,我需要选择自助服务终端并将已添加到该自助服务终端的展示位置的时长加起来,以检查是否可以在表中添加展示位置记录。
我想是这样
SELECT *, SUM(`placement`.`duration`) AS `d`
FROM `kiosk`
LEFT OUTER JOIN `placement` ON ((`cityId` = 'bac3d991-d13c-49c2-8563-8f974c75f6b9')
AND (`placement`.`kioskId` = `kiosk`.`id`)
AND ((`placement`.`dateBegin` BETWEEN 1333929600 AND 1333929600))
OR (`placement`.`dateEnd` BETWEEN 1333929600 AND 1333929600)))
GROUP BY `kiosk`.`id`
HAVING `d` <=225
OR `d` IS NULL
这225块的可能使用的秒数(我希望把15秒广告在这个例子中),并且如果没有放置记录这个亭子我检查d
为成为NULL
似乎我做的一切都是错误的,因为我收到所有自助服务终端的列表,没有mather它是什么的cityId或与其链接的展示位置。
我将感谢任何帮助
这似乎更接近我所需要的,但现在它retirns任何行。我想这是因为在展示位置表中没有匹配的记录 – necrobear 2012-04-09 15:48:50