我在PHP中编写了一个公式,它使用来自不同表的字段来计算百分比。我想尝试和完成的是将其转换为SQL,如果可能的话。
我知道我可以使用SET来制作局部变量,然后选择该变量显示在我的最终表中,但将这些变量设置为方程式会给我带来一些麻烦。
这是PHP。我试图让它尽可能简单而不会混淆。
/*Setting fields to variables for ease*/
$PU = {table1.PU}*60;
$PD = {table1.PD};
$UD = {table3.UD};
$GP = {table1.GP};
$S = {table2.S};
$R = {table4.R};
$PR = {table1.CT}/60;
/*Combining variables*/
$TRT = $PU - $PD - $UD;
$PT = $TRT * $PR;
$TP = $GP + $S + $R;
/*Checking and correcting for zero division plus final calculation*/
if ($PU == 0 || $PT == 0 || $TP == 0){
{complete} = "Error!";
}
else {
$a = $TRT/$PU;
$b = $TP/$PT;
$c = $GP/$TP;
{complete} = 100 * ($a * $b * $c);
}
MySQL我已经开始了。我的攻击计划是使用列名称将公式分配给变量,包括检查零分割。通过SQL Maestro运行此命令,在无效的SET令牌上给出错误。我试过用双引号包装整个东西(并检查@variable $ variable,=,= =所有没有运气)并检查了几个来源,我的SET命令应该是正确的。我的私钥和外键设置正确。
SET @a = (((table1.PU*60) - table1.PD - table3.UD) / (table1.PU*60));
SET @b = (table1.GP + table2.S + table4.R)/(((table1.PU*60) - table1.PD - table3.UPD)*(table1.CT/60));
SET @c = table1.GP/(table1.GP + table2.S + table4.R);
SET @complete = 100*(@a*@b*@c);
IF(table1.PU = 0, 'Error!',@a),
IF(table1.CT = 0, 'Error!',@p),
SELECT
table1.PU,
table1.PD,
table1.CT,
table2.S,
table3.UD,
table4.R,
@complete
FROM
table1
LEFT JOIN table2
LEFT JOIN table3
LEFT JOIN table4
我要查找的最终结果是显示我选择的所有单个字段以及计算字段。我已经调查了PROCEDURE,我认为这可能是有益的,但我不确定如何将其完全合并。
答案 0 :(得分:0)
我认为SET仅适用于选择查询:How to set variable from a SQL query?
此外,我假设table1-4只包含一行。否则,SET不起作用。
SET @a = (SELECT
(((table1.PU*60) - table1.PD - table3.UPD) / (table1.PU*60))
FROM table1, table3);
SET @b = (SELECT
(table1.GP + table2.S + table4.R)/(((table1.PU*60) - table1.PD - table3.UPD)*(table1.CT/60))
FROM table1, table2, table3, table4);
SET @c = (SELECT
table1.GP/(table1.GP + table2.S + table4.R)
FROM table1, table2, table4);
SET @complete = 100*(@a*@b*@c);
IF(table1.PU = 0, 'Error!',@a),
IF(table1.CT = 0, 'Error!',@p),
SELECT
table1.PU,
table1.PD,
table1.CT,
table2.S,
table3.UPD,
table4.R,
@complete // or perhaps (SELECT @complete as complete)
FROM
table1, table2, table3, table4
答案 1 :(得分:0)
你不需要SET。这是一个简单的SELECT,可以进行所有计算:
SELECT
table1.PU * 60 AS PU,
table1.PD AS PD,
table3.UPD AS UPD,
table1.GP AS GP,
table2.S AS S,
table4.R AS R,
table1.CT/60 AS PR,
(table1.PU * 60) - table1.PD - table3.UPD AS TRT,
(table1.PU * 60 - table1.PD - table3.UPD) * (table1.CT/60) AS PT,
table1.GP + table2.S + table4.R AS TP,
((table1.PU * 60) - table1.PD - table3.UPD) / (table1.PU * 60) AS a,
(table1.GP + table2.S + table4.R) / ((table1.PU * 60 - table1.PD - table3.UPD) * (table1.CT/60)) AS b,
table1.GP / (table1.GP + table2.S + table4.R) AS c,
100 * (((table1.PU * 60) - table1.PD - table3.UPD) / (table1.PU * 60)) * ((table1.GP + table2.S + table4.R) / ((table1.PU * 60 - table1.PD - table3.UPD) * (table1.CT/60))) * (table1.GP / (table1.GP + table2.S + table4.R)) AS complete
FROM
table1,
table2,
table3,
table4
假设您的所有表只包含一行。否则,您需要指定一些JOIN条件。