试图获得三月到十二月的工资,然后将它们加起来 mysql 和 php


trying to get Salary for months March to December then add them up in mysql and php

$January = 'January';
$February = 'February';
$March = 'March';
$April = 'April';
$May = 'May';
$June = 'June';
$July = 'July';
$August = 'August';
$September = 'September';
$October = 'October';
$November = 'November';
$December = 'December';
$user = $_COOKIE['user'];
$Year = '2017';
$Year1 = '2016';

在下面的代码中,我只尝试获取带有其值的工资字段,这些月份是从三月到十二月,但它返回 null,但在数据库中我可以看到工资字段中有值。

// total Salary 
$result1 = mysqli_query($link, "SELECT Salary FROM $tb2_name WHERE Employee_Number='$user' AND Month='$March' AND Month='$April' AND Month='$May' AND Month='$June' AND Month='$July' AND Month='$August' AND Month='$September' AND Month='$October' AND Month='$November' AND Month='$December' AND Year='$Year1' "); 
$row = mysqli_fetch_assoc($result1); 
$test_sum = array_sum($row);

首先,最好更改数据库表的设计以实际保存日期(如 DATE 或 DATETIME 数据类型(,这会将您的查询简化为:

SELECT Salary FROM $tb2_name
WHERE Employee_Number='$user'
AND `date` BETWEEN '2016-03-01' AND '2016-12-31'

这将为您提供 2016 年 3 月 1 日至 12 月 31 日之间的员工$user的所有行。所以,如果你有改变桌子的自由,我强烈建议你这样做。

话虽如此。当前查询的主要问题是您使用AND而不是OR。数据库中的工资行永远不能同时具有三月、四月和五月(等(。它总是非此即彼。

但是有这么多个月,使用大量的OR语句可能会变得难以阅读(并且在与其他ANDOR语句混合时可能会导致问题(。在这种情况下,您还可以使用 IN 语句使列与该组选项中的任何内容匹配。因此,请将其更改为:

SELECT Salary FROM $tb2_name
WHERE Employee_Number='$user'
AND Month IN (
    '$March', '$April', '$May', '$June', '$July', '$August',
    '$September', '$October', '$November', '$December'
)
AND Year='$Year1';

将查询更改为以下内容

     $result1 = mysqli_query($link, "SELECT Salary FROM $tb2_name WHERE Employee_Number='".$user."' AND ( Month='".$March."' OR Month='".$April."' OR Month='".$May."' OR Month='".$June."' OR Month='".$July."' OR Month='".$August."' OR Month='".$September."' OR Month='".$October."' OR Month='".$November."' OR Month='".$December."') AND Year='".$Year1."' ");                                             

while( $row = mysqli_fetch_assoc($result1)){
        print_r($row);
    }

使用 OR 条件

$result1 = mysqli_query($link, "SELECT Salary FROM $tb2_name WHERE Employee_Number='$user' AND Month='$March' OR Month='$April' OR Month='$May' OR Month='$June' OR Month='$July' OR Month='$August' OR Month='$September' OR Month='$October' OR Month='$November' OR Month='$December' OR Year='$Year1' "); $row = mysqli_fetch_assoc($result1); $test_sum = array_sum($row);
$result1 = mysqli_query($link, "SELECT Salary FROM $tb2_name WHERE Employee_Number='".$user."' AND ( Month='$March' OR Month='".$April."' OR Month='".$May."' OR Month='".$June."' OR Month='".$July."' OR Month='".$August."' OR Month='".$September."' OR Month='".$October."' OR Month='".$November."' OR Month='".$December."') AND Year='".$Year1."' ");

若要匹配列表的任何值,可以使用IN语句来形成更紧凑的查询。

SELECT salary FROM tablename WHERE colname IN('value1', 'value2', 'value3', ...)

使用 ENUM 表示月份,如下所示

create table income(id int not null primary key auto_increment,
user_id not null varchar(500),
month ENUM('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'),
year varchar(500),
salary varchar(500))

查询

SELECT salary FROM income
WHERE month in('Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') 
and user_id='user_01'

请使用这个:

$result1 = mysqli_query($link, "SELECT Salary FROM $tb2_name WHERE Employee_Number='mysqli_real_escape_string($link,$user)' AND (Month='$March' OR Month='$April' OR Month='$May' OR Month='$June' OR Month='$July' OR Month='$August' OR Month='$September' OR Month='$October' OR Month='$November' OR Month='$December') AND Year='$Year1' ");