#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 для дальнейшей разработки.