2011-05-28 87 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