【问题标题】:Selecting rows that corresponds from other table从其他表中选择对应的行
【发布时间】:2011-05-28 12:30:25
【问题描述】:

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

我正在使用 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();

我想在生产中添加一个日期间隔。

基本上,我想获取给定日期内所有产品的生产数量。

我该怎么做?

感谢您的任何建议。

【问题讨论】:

    标签: php mysql codeigniter codeigniter-datamapper


    【解决方案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
    ");
    

    【讨论】:

    • 感谢您提供的非常有用的语法。如果找不到解决方案,我将使用此语法。但我需要 datamapper 解决方案来进一步开发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多