Php 拉雷维尔4号准备发言
我想知道我怎样才能把一份事先准备好的声明放在第四章 以下是我在MySQL Workbench中编写的准备好的语句:Php 拉雷维尔4号准备发言,php,mysql,laravel-4,Php,Mysql,Laravel 4,我想知道我怎样才能把一份事先准备好的声明放在第四章 以下是我在MySQL Workbench中编写的准备好的语句: SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) i', `payroll_item_id`) ) INTO @sql FROM payroll_item_se
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) i', `payroll_item_id`)
) INTO @sql
FROM payroll_item_settings;
SET @sql = CONCAT('SELECT employee_id, ', @sql, ' FROM payroll_item_settings GROUP BY employee_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我找到了一个解决方法,我使用了如下存储过程:
DELIMITER $$
CREATE PROCEDURE employees_payroll_settings()
BEGIN
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) AS `', payroll_items.payroll_item, '`')
) INTO @sql
FROM payroll_item_settings
JOIN payroll_items
ON payroll_items.id = payroll_item_settings.payroll_item_id;
SET @sql = CONCAT('SELECT employees.employee_name, ', @sql, ' FROM payroll_item_settings JOIN employees ON employees.id = payroll_item_settings.employee_id GROUP BY employee_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
$payroll_items = DB::table('payroll_items')
->distinct()
->join('payroll_item_settings', 'payroll_items.id', '=', 'payroll_item_settings.payroll_item_id')
->select('payroll_items.*', 'payroll_item_settings.payroll_item_id')
->get();
$payroll_item_settings = DB::select('CALL employees_payroll_settings()');
return View::make('payroll_item_setting.index', array(
'payroll_item_settings' => $payroll_item_settings,
'payroll_items' => $payroll_items
));
然后在我的控制器中,我放置了如下内容:
DELIMITER $$
CREATE PROCEDURE employees_payroll_settings()
BEGIN
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) AS `', payroll_items.payroll_item, '`')
) INTO @sql
FROM payroll_item_settings
JOIN payroll_items
ON payroll_items.id = payroll_item_settings.payroll_item_id;
SET @sql = CONCAT('SELECT employees.employee_name, ', @sql, ' FROM payroll_item_settings JOIN employees ON employees.id = payroll_item_settings.employee_id GROUP BY employee_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
$payroll_items = DB::table('payroll_items')
->distinct()
->join('payroll_item_settings', 'payroll_items.id', '=', 'payroll_item_settings.payroll_item_id')
->select('payroll_items.*', 'payroll_item_settings.payroll_item_id')
->get();
$payroll_item_settings = DB::select('CALL employees_payroll_settings()');
return View::make('payroll_item_setting.index', array(
'payroll_item_settings' => $payroll_item_settings,
'payroll_items' => $payroll_items
));