【发布时间】:2015-05-27 07:15:31
【问题描述】:
当我运行我的代码时,我得到了这个错误:
警告:mssql_query():消息:“bstplanning”附近的语法不正确。 (严重性 15)在 /var/www/bstplanning/report/scorecard2.php 第 91 行
警告:mssql_query():一般 SQL Server 错误:检查来自 SQL Server(严重性 15)的消息 /var/www/bstplanning/report/scorecard2.php 第 91 行
我的代码如下所示:
if ($team != 'All') {
$sql_team = "users.split = '" . $team . "' AND";
$sql_user = "users.user_id LIKE '%'";
} else {
$sql_team = "users.user_id LIKE '%' AND";
if ($user != 'All') {
$sql_user = "users.user_id = '" . $user . "'";
} else {
$sql_user = "users.user_id LIKE '%'";
}
}
$sql = "
SELECT
Drive.Owner
,ROUND(AVG(CAST(actual AS FLOAT)), 2) as rezult
,ROUND(Sum(CAST(Ontime AS FLOAT))/Sum(task_count), 2) as rezult2
,ROUND(sum(case when firsta != 'none' then 1 else 0 end)/ROUND(CAST(count(firsta)AS FLOAT),2)*100,2) nones1
,ROUND(sum(case when seconda != 'none' then 1 else 0 end)/ROUND(CAST(count(seconda)AS FLOAT),2)*100,2) nones1
,ROUND(CAST(count(dock )AS FLOAT),2)/CAST(sum(case when dock = 'yes' then 1 else 0 end)AS FLOAT)*100 as documentavail
,(sum(case when dock = 'yes' then 1 else 0 end)+sum(case when dock = 'old' then 1 else 0 end))/count(dock)*100 as documentavail
FROM (
SELECT
users.user_name+ ' ' +users.user_surname AS Owner
,users.split as test
,sc.firstbackup as firsta
,sc.secondbackup as seconda
,sc.documentation as dock
,sc.active as active
,(SELECT CASE WHEN non_sc = '1' THEN 'regular' ELSE 'sc' END) as sc_or_non_sc
FROM
sc
INNER JOIN
users
ON sc.user_id = users.user_id
WHERE
" . $sql_team . " " . $sql_user . "
) Drive
left join
(
SELECT
bstplanning.dbo.sc_data.track
,bstplanning.dbo.users.split
,bstplanning.dbo.sc_data.country
,bstplanning.dbo.sc_data.client
,bstplanning.dbo.sc_data.task_group
,MAX(ISNULL(bstplanning.dbo.users.user_name,'') + ' ' + ISNULL(bstplanning.dbo.users.user_surname,'')) as Owner
,AVG(CASE WHEN bstplanning.dbo.sc_data.ontime = 'on time' THEN 100 ELSE 0 END)*COUNT(bstplanning.dbo.sc_data.country) AS Ontime
,AVG(CASE WHEN bstplanning.dbo.sc_data.accuracy = 'accurate' THEN 100 ELSE 0 END) AS actual
,COUNT(bstplanning.dbo.sc_data.country) AS task_count
FROM
bstplanning.dbo.sc_data
INNER JOIN bstplanning.dbo.users
ON bstplanning.dbo.sc_data.user_id = bstplanning.dbo.users.user_id
WHERE
bstplanning.dbo.sc_data.date >= '" . $nuo . "' AND bstplanning.dbo.sc_data.date <= '" . $iki . "' AND " . $sql_team . " " . $sql_user . " bstplanning.dbo.sc_data.actual > 0 AND
((bstplanning.dbo.sc_data.ontime='on time' OR bstplanning.dbo.sc_data.ontime = 'late') OR (bstplanning.dbo.sc_data.accuracy='accurate' OR bstplanning.dbo.sc_data.accuracy = 'error'))
GROUP BY
bstplanning.dbo.sc_data.country
,bstplanning.dbo.sc_data.client
,bstplanning.dbo.sc_data.task_group
,bstplanning.dbo.users.split
,bstplanning.dbo.sc_data.track
) Drive2
on Drive.Owner=Drive2.Owner
where sc_or_non_sc ='sc'
group by
Drive.Owner
";
我不知道出了什么问题,因为当我在 SQL Server Management 中运行代码时,它运行良好。我认为问题出在 $team 或 $user 上,但我不知道如何解决它。这太疯狂了,当我从选择中删除“Where”时它起作用了。
【问题讨论】:
-
您检查了
$sql的结果并在 Management Studio 中运行了吗?找出答案的最佳方法是在填写所有变量等时输出$sql,因为现在无法知道第 91 行是什么或错误在哪里,它基本上是大海捞针。 -
“当我在 SQL Server 管理中运行代码时,它工作正常”——这似乎是一个 SQL 语法错误。也许,你在调试时错过了一些东西。您确定您运行的正是在 php 中执行的 SQL 吗?
-
抱歉没有添加91行,91行包含“$result = mssql_query ($sql);”
-
@user4035 我不这么认为,我多次复制文本,尝试更改变量,但似乎有些东西不想工作。我认为这个问题可能与左连接有关,因为它们是两个不同的表。
-
就在像 91 一样执行实际查询执行之前,添加一个
echo sql;并发布查询。
标签: php sql sql-server left-join