【发布时间】:2017-11-29 10:30:03
【问题描述】:
当我在屏幕上回显我的查询并直接在 SSMS 中运行时,我会返回一行,这正是我所追求的。当我在我的 php 中运行此查询时,我会返回多行(似乎每个经销商都有一个)。
我应该在此语法中进行哪些更改,以便我只有 1 行在 php 中的屏幕上显示总计,就像我的 SSMS 中发生的那样? --> 如果我将表的结果复制/粘贴到 Excel 中尝试排序,我所拥有的只是 0 显示在表中,而不是像我直接在 SSMS 中查询时看到的返回的实际数据
{
$startdate = $_POST['startdate'];
$enddate = $_POST['enddate'];
$Dealer = $_POST['dealer'];
$option = array();
$option['driver'] = 'mssql';
$option['host'] = '192.5.100.23';
$option['user'] = 'username';
$option['password'] = 'passs';
$option['database'] = 'test';
$option['prefix'] = '';
$db = JDatabase::getInstance($option);
$query11 = $db->getquery11(true);
$query11 = "SELECT
MAX(A.Value1) AS Value1,
MAX(A.Value10) AS WorkinIT,
MAX(A.Value11) AS OTG
FROM
(
SELECT
ZT1.Dealer,
SUM(ISNULL(ZT1.[Value1],0)) AS Value1,
0 AS Value10,
0 AS Value11
FROM ROCK AS ZT1
WHERE ZT1.[PUD] >= '$startdate'
AND ZT1.[PUD] <= '$enddate'";
if ($Dealer != 'All') {
$query11 .= " AND ZT1.Dealer = '$Dealer'";
}
$query11 .= " GROUP BY ZT1.Dealer
UNION ALL
SELECT
ZT2.Dealer,
0 As Value1,
0 AS Value10,
0 AS Value11
FROM GALL ZT2
WHERE ZT2.[sellD] >= '$startdate'
AND ZT2.[sellD] <= '$enddate'";
if ($Dealer != 'All') {
$query11 .= " AND ZT2.Dealer = '$Dealer'";
}
$query11 .= " GROUP BY ZT2.Dealer
UNION ALL
SELECT
Dealer = RTRIM(LTRIM(dealer)),
0 As Value1,
SUM(ISNULL(abc,0)) AS Value10,
0 AS Value11
FROM WorkinIT AS C1
GROUP BY dealer
UNION ALL
SELECT
Dealer = RTRIM(LTRIM(dealer)),
0 As Value1,
0 AS Value10,
SUM(ISNULL(prs,0)) AS Value11
FROM eOTG AS C2";
if ($Dealer != 'All') {
$query11 .= " WHERE C2.Dealer = '$Dealer'";
}
$query11 .= " GROUP BY dealer) AS A";
}
echo $query11;
$db->setquery11($query11);
$query11 = $db->loadObjectList();
if ($query11)
{
?>
<table border="1">
<thead>
<tr>
<th>Value </th>
<th>OTG </th>
<th>WorkinIT </th>
</tr>
</thead>
<?php
foreach ($query11 as $res)
{
print "<tr>";
print "<td>" . "$" . round($res->Value1) . "</td>";
print "<td>" . "$" . round($res->WorkinIT) . "</td>";
print "<td>" . "$" . round($res->OTG) . "</td>";
print "</tr>";
}
}
编辑
这是上述语法生成的 echo 语句,在 SSMS GUI 中运行良好
SELECT Max(A.value1) AS Value1,
Max(A.value10) AS WorkinIT,
Max(A.value11) AS OTG
FROM (SELECT ZT1.dealer,
Sum(Isnull(ZT1.[value1], 0)) AS Value1,
0 AS Value10,
0 AS Value11
FROM rock AS ZT1
WHERE ZT1.[pud] >= '2017-06-01'
AND ZT1.[pud] <= '2017-06-22'
GROUP BY ZT1.dealer
UNION ALL
SELECT ZT2.dealer,
0 AS Value1,
0 AS Value10,
0 AS Value11
FROM gall ZT2
WHERE ZT2.[selld] >= '2017-06-01'
AND ZT2.[selld] <= '2017-06-22'
GROUP BY ZT2.dealer
UNION ALL
SELECT dealer = Rtrim(Ltrim(dealer)),
0 AS Value1,
Sum(Isnull(abc, 0)) AS Value10,
0 AS Value11
FROM workinit AS C1
GROUP BY dealer
UNION ALL
SELECT dealer = Rtrim(Ltrim(dealer)),
0 AS Value1,
0 AS Value10,
Sum(Isnull(prs, 0)) AS Value11
FROM eotg AS C2
GROUP BY dealer) AS A
【问题讨论】:
-
向您的脚本添加一些错误报告,您可能会在代码中被告知 MISSING
"。或者使用一个像样的代码编辑器和代码着色也会给你一个提示 -
这样的查询变量的字符串连接将使您容易受到 SQL 注入攻击。使用准备好的语句和参数会更明智。
-
$query11 .= " GROUP BY ZT2.Dealer之后缺少引号 ~ 应该是$query11 .= " GROUP BY ZT2.Dealer ";,我不禁觉得具有嵌套选择的初始选择查询缺少右大括号 -
Smiffy,如果你不给我们看真实的代码,你不会得到有用的答案
-
@RiggsFolly - 复制/粘贴错误。在转到 php 之前,我在 Netbeans IDE 中检查了语法。
标签: php html joomla html-table joomla3.0