我知道如果你可以在SQL查询中使用distinct,那么:
SELECT DISTINCT column_name FROM table_name;
为了提取所有唯一匹配数据,因此不会在循环中反复复制。我有一个难题,我有一个使用连接的SELECT语句;一切都很好。从我创建的那个循环中有一个IF和Else语句。如果数据落在某个日期范围之间,则显示相关数据。但是,如果它不在日期范围内,那么我只想显示一些数据。
问题在于,else语句意图在每次在数据库的每一行中重复数据时复制数据。现在我真的不想使用两个单独的查询,所以我看到过去是否有人有过这方面的经验以及他们为解决这个问题所采取的措施。
对于那些不了解我所得到的人,我将包括代码:
// Database query
$db_query = mysqli_query($con,$db_data_query);
while($db_result = mysqli_fetch_array($db_query)) {
// Convert to proper datetime format
$dt_vdate = new DateTime($view_date);
$convert_vdate = $dt_vdate->format('Y-m-d H:i:s');
// Check if the date is within the date range
if (( $convert_vdate >= $db_result['start'] ) && ( $convert_vdate <= $db_result['finish'] )) {
// Display Jobs within Range
echo '
<div class="db_col">
<div class="person">'. $db_result['name'] . ' #' . $db_result['id'] .'</div>
<div class="location">'. $db_result['location'] .'</div>
<div class="task">' . $db_result['task'] . '</div>
</div>';
}
// Display blank tasks
else if (**( $db_result['start'] == "" ) && ( $db_result['finish'] == "" )**){
// Display Jobs within Range
echo '
<div class="db_col">
<div class="person">'. $db_result['name'] . ' #' . $db_result['id'] .'</div>
<div class="location">'. $db_result['location'] .'</div>
<div class="task"> </div>
</div>';
}
我把**放在了elseif条件旁边。我有一种有趣的感觉,我需要将其分解为两个查询,但为了让生活变得轻松我在想是否反正基本上检查该人是否在日期范围之间分配了任务,然后显示该人的姓名,id#和分配任务。如果他们没有分配任务,那么(使用else if)只显示他们的名字,id#和一个空白div。
这样可以打印此页面,并且可以手动将任务写在页面上,以后可以手动写入。
正在发生的问题是数据库正在显示分配的人员和任务。但是如果他们没有被分配任务,那么每次他们被分配了一个任务,那么就会为这些数据库条目中的每一个显示该人及其ID#和空白div。所以我试图集体讨论一种方式,如果没有人分配任务,那么else会显示一个人,id,任务一次(不是多次)。
答案 0 :(得分:0)
鉴于上面的评论是正确的,您可以通过将人员的'id'值存储在数组中并使用in_array进行检查来执行解决方法:
:
:
$got_ids=array();
while (...)
{
$testid=$db_result['id'];
if (in_array($testid,$got_ids)) continue;
:
:
$got_ids[]=$testid;
} // end while
应解决问题