0

我知道,如果您可以像这样在 SQL 查询中使用 distinct:

SELECT DISTINCT column_name FROM table_name;

为了提取所有唯一匹配的数据,使其不会在循环中一遍又一遍地复制。我有一个难题,我有一个使用 Joins 的 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">&nbsp;</div>
    </div>';        
    }

我把 ** 放在 elseif 条件旁边。我有一种有趣的感觉,我需要把它分成两个查询,但为了让生活更轻松,我在想是否有办法基本上检查这个人在日期范围之间是否有分配的任务,然后显示这个人的名字,id # 和分配的任务。如果他们没有分配任务,则改为(使用 else if)只显示他们的姓名、id # 和空白 div。

通过这种方式,可以打印出该页面,并且可以在页面上手动写入任务,以后可以手动写入。

正在发生的问题是数据库很好地显示了分配的人员和任务。但是,如果他们没有被分配任务,那么对于他们过去每次分配任务时,都会为每个数据库条目显示人员及其 ID # 和空白 div。因此,我试图集思广益,如果没有为该人分配任务,则 else if 显示该人、ID、任务一次(而不是多次)。

4

1 回答 1

0

鉴于我上面的评论是正确的,您可以通过将人员的“id”值存储在数组中并使用 in_array 进行检查来解决问题:

:
:
$got_ids=array();
while (...)
{
  $testid=$db_result['id'];
  if (in_array($testid,$got_ids)) continue;
  :
  :
  $got_ids[]=$testid;
} // end while

应该解决问题

于 2013-11-04T20:56:15.970 回答