php - 如何在 PhalconPHP 中运行 RAW SQL 查询

标签 php mysql crosstab phalcon

我尝试从这个查询中得到结果

$sql = "
                SET @col = NULL;
                SET @sql = NULL;

                Select
                  Group_Concat(Distinct
                    Concat(
                      'SUM(CASE WHEN tbl.sdate = ''',
                      colname,
                      ''' THEN tbl.result ELSE NULL END) AS ''',
                      colname,''''
                    )
                  ) Into @col
                From (
                    select concat(month(i.invdate),'.',year(i.invdate)) as colname
                    from invoices as i
                    where i.invtype = 1 and i.pid = 5
                    order by i.invdate  
                ) As collst;

                SET @sql = CONCAT('SELECT tbl.wrkname,', @col, ' 
                                        FROM (
                                            Select wl.wgname As wrkname, Concat(Month(i.invdate),''.'',Year(i.invdate)) as sdate, Sum(id.qty * id.price) As result
                                            From invoices As i
                                                Join invoicedetails As id
                                                    On i.pchid = id.pchid
                                                Join workgroups As w
                                                    On i.wid = w.wid
                                                Join workgrouplist As wl
                                                    On w.wglid = wl.wglid
                                            Where i.invtype = ', 1, ' And i.pid =', 5,
                                            ' Group By i.pid, sdate
                                            Order By i.invdate, wrkname
                                        ) AS tbl
                                        GROUP BY tbl.wrkname');

                PREPARE stmt FROM @sql;
                EXECUTE stmt;
                DEALLOCATE PREPARE stmt;
                "

但结果是“SQLSTATE[HY000]:一般错误”。

Phalcon 版本:1.2.4

探查器日志是:

SQL Statement: SET @col = NULL; SET @sql = NULL; Select Group_Concat(Distinct Concat( 'SUM(CASE WHEN tbl.sdate = ''', colname, ''' THEN tbl.result ELSE NULL END) AS ''', colname,'''' ) ) Into @col From ( select concat(month(i.invdate),'.',year(i.invdate)) as colname from invoices as i where i.invtype = 1 and i.pid = 5 order by i.invdate   ) As collst; SET @sql = CONCAT('SELECT tbl.wrkname,', @col, ' FROM ( Select wl.wgname As wrkname, Concat(Month(i.invdate),''.'',Year(i.invdate)) as sdate, Sum(id.qty * id.price) As result From invoices As i Join invoicedetails As id On i.pchid = id.pchid Join workgroups As w On i.wid = w.wid Join workgrouplist As wl On w.wglid = wl.wglid Where i.invtype = ', 1, ' And i.pid =', 5, ' Group By i.pid, sdate Order By i.invdate, wrkname ) AS tbl GROUP BY tbl.wrkname'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
Start Time: 1388927869.2788
Final Time: 1388927869.2808
Total Elapsed Time: 0.0019619464874268

问题已解决:我创建存储过程并插入所有查询。 接下来我在 php 脚本中调用存储过程。

$sql = "CALL GetReportByProjectBetweenDates(1, 5)";
$result = $this->db->query($sql); 

最佳答案

在 Controller 上运行原始 sql:

$this->db->query("SELECT * FROM robots WHERE id > 0");

在模型上运行原始 sql:

$this->getDi()->getShared('db')->query("SELECT * FROM robots WHERE id > 0");

关于php - 如何在 PhalconPHP 中运行 RAW SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934071/

相关文章:

Python Pandas 按多个类别和年份交叉表

ms-access - MS Access 交叉表查询参数

jasper-reports - 递增交叉表数据集时出错

php - GMAIL 在发送 SMTP 邮件时显示 BCC 列表

php - 如何在mysql单元格中存储数据列表(如数组)? (但仍然可以搜索)

php - 只捕获 SimpleXML 异常?

php - 从数据库中检索数据时php中的问题

php - UTF-8贯穿始终

php - 在 url 中添加/更新参数

mysql - 尝试在 AWS EC2 Amazon Linux 上安装 mysql-server,但出现问题 : conflicting requests