我报告我的问题是为了更简洁一点。 (删除其他)
我有一个自己建立的时间报告系统,我正在尝试创建一个依从性类型的报告。
基本上我正在尝试执行以下操作:
- 根据 where 子句和字段 practice=ccv & year=2016(例如)在我的数据库中收集所有唯一名称($fn、$ln)
- 然后我还想根据 practice=ccv & year=2016 和附加的 where 子句 week=8 收集另一个名称列表 ($fn, $ln)
- 这将给我 2 个不同的列表,我可以比较它们,不同之处将是第 8 周的未完成考勤卡。
从那里,我需要显示所有提交的名称(来自上面的#3)以及未完成的列表(通过比较上面的#1 和#2)
到目前为止,我可以获得名称列表。但是,然后我需要为每个人显示来自数据库的附加数据(地区、时间戳等..)
期望的输出是这样的:
已提交
欧洲、中东和非洲
约翰·杰
沃利R
北美
戴维斯 D
鲍勃·C
约翰 Y
优秀
欧洲、中东和非洲
凯尔·D
北美
科里·T
休·R
约翰·杰
拉丁美洲
等等....
到目前为止,这就是我所拥有的..我确定我的做法是错误的。
<?php
$con = mysqli_connect("localhost","xxx","xxx!","xxx");
//Get distinct names from practice
if ($con) {
$SQL = "SELECT DISTINCT fn,ln FROM $table WHERE year='$year' AND practice='$practice' AND archived!='yes' ORDER BY region,fn,ln";
}
$result = mysqli_query($con,$SQL);
if (!$result) die('Couldn\'t fetch records');
while ( $db_field = mysqli_fetch_assoc($result) ) {
$name[] = trim($db_field['fn']. " " .$db_field['ln']);
}
//Get distinct names for current week practice
if ($con) {
$SQL2 = "SELECT DISTINCT fn,ln FROM $table WHERE year='$year' AND week_num='$week' AND practice='$practice' AND archived!='yes' ORDER BY region,fn,ln";
}
$result2 = mysqli_query($con,$SQL2);
if (!$result2) die('Couldn\'t fetch records Again');
while ( $db_field = mysqli_fetch_assoc($result2) ) {
$name2[] = trim($db_field['fn']. " " .$db_field['ln']);
}
//$SQL3 = "SELECT fn,ln,week_start_date,region FROM $table WHERE fn IN ( '".implode("', '", $differences)."' )");
mysqli_close($con);
?>
<TABLE><TR><TD>
<B>All Names</B><BR>
<?php
foreach ( $name as $item ) {
echo $item . "<br/>";
}
?>
</TD>
<TD>
<B>Names for Week 8</B><BR>
<?php
foreach ( $name2 as $item2 ) {
echo $item2 . "<br/>";
}
?>
</TD>
<TD>
<B>Outstanding</B><BR>
<?php
$results = array_diff($name, $name2);
foreach($results as $val) {
echo $val ." - ".$val2."<BR>";
}
?>
</TD>
</TR>
</TABLE>
最佳答案
我认为你应该在 MySQL 级别解决这个问题。
// All names with all data
$SQL = "SELECT DISTINCT *, CONCAT(fn,' ',ln) AS `name` FROM $table WHERE year='$year' AND practice='$practice' AND archived!='yes' ORDER BY region,fn,ln";
// Names for specific week with all data
$SQL = "SELECT DISTINCT *, CONCAT(fn,' ',ln) AS `name` FROM $table WHERE year='$year' AND week_num='$week' AND practice='$practice' AND archived!='yes' ORDER BY region,fn,ln";
// Outstanding rows with all data
$SQL = "SELECT * FROM (SELECT DISTINCT *, CONCAT(fn,' ',ln) AS `name` FROM $table WHERE year='$year' AND practice='$practice' AND archived!='yes') AS `subquery` WHERE `name` NOT IN (SELECT DISTINCT CONCAT(fn,' ',ln) AS `name` FROM $table WHERE year='$year' AND week_num='$week' AND practice='$practice' AND archived!='yes') ORDER BY region,fn,ln";
这样您就不需要在 PHP 级别对数据进行排序和处理。无法对此进行测试,因为我没有数据库环境,但它应该可以工作,可能需要一些小的更改。
关于php - 显示来自 MySQL 数据库的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557079/