Выбор строк, соответствующих из другой таблицы

#php #mysql #codeigniter #codeigniter-datamapper

#php #mysql #codeigniter #codeigniter-datamapper

Вопрос:

У меня есть таблица product, в которой хранятся все продукты. Также у меня есть производственная таблица, в которой хранятся производственные данные.

Я использую 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
");
  

Комментарии:

1. Спасибо за синтаксис, это очень полезно. Если я не найду решение, я буду использовать этот синтаксис. Но мне нужно решение datamapper для дальнейшей разработки.