2011-05-28 67 views
2

我有一个存储所有产品的产品表。另外我有一张存放作品的制作表。选择对应于其他表的行

我使用CodeIgniter和datamapper ORM。

这里是表:

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `kod_stok` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `kod_lokal` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `kod_firma` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
    `firma` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `fabrika` varchar(10) COLLATE utf8_unicode_ci NOT NULL, 
    `proje` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
    `tanim` mediumtext COLLATE utf8_unicode_ci, 
    `saatlik_uretim` int(11) NOT NULL, 
    `status` tinyint(4) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `kod_lokal` (`kod_lokal`), 
    KEY `kod_firma` (`kod_firma`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ; 

CREATE TABLE IF NOT EXISTS `productions` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `fabrika` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `board_no` int(11) NOT NULL, 
    `date` int(11) DEFAULT NULL, // Unix Timestamp 
    `operator_id` int(11) DEFAULT NULL, 
    `product_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `product` (`product_id`), 
    KEY `date` (`date`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ; 

我试图获得生产一天的计数。但并非所有产品,每天都在生产。我需要排除0计数的产品。

$p = new Product(); 
$p->include_related_count('production'); 
$p->get(); 

我想添加日期间隔生产。

基本上,我想在给定的一天内获得所有产品的产量。

我该怎么做?

谢谢你的任何建议。

回答

1

不确定关于codeigniter的详细信息,但以下SQL查询将每天生成一个生产列表。

为了让今天的生产:

$query = $this->db->query(" 
SELECT 
    a.count(*) as produced 
    , a.product_id 
    , b.kod_stok as productname 
    FROM productions a 
    INNER JOIN products b ON (a.product_id = b.id) 
    WHERE FROM_UNIXTIME(a.date) = CURDATE() 
    GROUP BY TO_DAYS(FROM_UNIXTIME(a.date)), a.product_id 
"); 

要获得最近7天的生产

$query = $this->db->query(" 
SELECT 
    a.count(*) as produced 
    , a.product_id 
    , b.kod_stok as productname 
    FROM productions a 
    INNER JOIN products b ON (a.product_id = b.id) 
    WHERE FROM_UNIXTIME(a.date) 
    BETWEEN DATE_SUB(CURDATE(),INTERVAL 7 DAY) AND CURDATE() 
    GROUP BY TO_DAYS(FROM_UNIXTIME(a.date)), a.product_id 
"); 
+0

谢谢你的语法,这是非常有帮助的。如果我找不到解决方案,我将使用此语法。但是我需要datamapper解决方案来进一步开发。 – Valour 2011-05-28 23:56:39