我正在使用 sql 数据库 (phpMyadmin) 和编程语言 PHP。 我有一个包含数据的表格,例如:
T1: 145 138.8 110.6 1759.4 1400.9 1891.4 1755.4 1760.4
T2: 141.9 110.6 1400.9 1891.4 1758.4
我的问题> 是否存在现有的 SQL 语法,能够对位于一个阈值(如 > 1755.4,1760.4,1759.4 或 145,138.8)内的值进行平均,并将它们作为唯一值插入到另一个表中?
我需要的是从 T1 创建 T2(包含唯一值),并且仅当 T2 中不存在它们时才插入它们。
我也尝试循环抛出 2 个数组(1starray = T1 和 2ndarray = T2 )。并比较array1和array2中的数据,并尝试插入可以唯一的值。
for($z = 0; $z<$numberApp; $z++) {
while($j<$numberAbs-1){
$Abs=$arrayabs[$j];
$state_change = (abs($Abs - abs($previous_Abs)));
if ($state_change>100){
$instantChange = True;
echo "<br>"." better than tolerance: " . $instantChange;
}
else {
$instantChange = False;
echo "<br>"." lower than tolerance" . $instantChange;
}
//if($state_change = (abs($some_item - $previous_item)<= $tolerance)){
if($Abs != $previous_Abs){
echo "<br>" ." some_item : " .$Abs." previous_item : " .$previous_Abs;
}
//$lastAbs=$arrayabs[$j];
//echo " next_item : " .$lastAbs;
if ($instantChange == True and $onChange == False){
$Abs2 [] = $podiel;
$finalPower = $podiel;
}
if ($instantChange){
$D=0;
echo "ABSOLUT >>> " .$lastAbs;
$percentual1 = ($power_app[$z] * 0.9);
$percentual2 = ($power_app[$z] * 1.1);
if(($lastAbs<$percentual1 || $lastAbs>$percentual2)){
$user = 'root';
$pass = 'password';
$db = 'vypis';
//if($N>0){
$db = new mysqli('localhost', $user, $pass, $db) or die();
$sql = "INSERT INTO vypis.nilm_app2(power) VALUES ('$lastAbs')";
if(mysqli_query($db, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($db);
}
}
//$power_app[$z++];
}
感谢大家的帮助,并对我的英语不好表示歉意。
最佳答案
这里的数学听起来足够复杂,您可能最好在 PHP 中完成复杂的事情(对值进行平均并确定值是否唯一),然后使用几个简单的 MySQL 来完成声明。
这可能可以在纯 MySQL 中通过一些技巧来完成,但通常不值得为此花费时间和复杂性。 (想象一下,六个月后您将不得不调试那个怪物 SQL 查询!)
相比之下,在 PHP 中获取一些值并对它们求平均值是很简单的;运行快速 MySQL 查询来确定值是否唯一也很简单。因此,如果您不确定如何将这些内容合并到一个大的 SQL 语句中,请首先在 PHP 代码中将它们作为单独的步骤进行处理!然后,如果出现性能问题,您可以考虑如何将它们组合起来(但至少到那时您已经有了一些可行的东西)。
关于PHP sql数据库,插入UNIQUE值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969968/