Php 选择与其他表相对应的行

Php 选择与其他表相对应的行,php,mysql,codeigniter,codeigniter-datamapper,Php,Mysql,Codeigniter,Codeigniter Datamapper,我有一个存储所有产品的产品表。我还有一个存储产品的生产表 我正在使用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) COLL

我有一个存储所有产品的产品表。我还有一个存储产品的生产表

我正在使用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();
我想给生产增加一个日期间隔

基本上,我希望在给定的一天内获得所有产品的生产计数

我该怎么做


谢谢您的建议。

不确定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
");

谢谢你的语法,这是非常有帮助的。如果找不到解决方案,我将使用此语法。但我需要datamapper解决方案进行进一步开发。