Ich versuche zu bekommen resultiert aus dieser AbfrageWie RAW SQL-Abfrage in PhalconPHP
$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;
"
aber Ergebnis war "SQLSTATE [HY000]: Allgemeiner Fehler" laufen.
Phalcon Version: 1.2.4
Profiler Protokoll ist:
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
Problem gelöst: Ich gespeicherte Prozedur erstellen und alle Abfrage einfügen. Als nächstes rufe ich gespeicherte Prozedur in PHP-Skript.
$sql = "CALL GetReportByProjectBetweenDates(1, 5)";
$result = $this->db->query($sql);
Sie können Ihre eigene Frage, posten Sie Ihre Lösung mit Antworten beantworten – mosid