$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
语句可能会变得难以阅读(并且在与其他AND
或OR
语句混合时可能会导致问题(。在这种情况下,您还可以使用 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' ");