【发布时间】:2013-11-04 20:34:31
【问题描述】:
我知道,如果您可以像这样在 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"> </div>
</div>';
}
我把 ** 放在 elseif 条件旁边。我有一种有趣的感觉,我需要把它分成两个查询,但为了让生活更轻松,我在想是否有办法基本上检查这个人在日期范围内是否有分配的任务,然后显示这个人的名字,id # 和分配的任务。如果他们没有分配任务,则改为(使用 else if)只显示他们的姓名、id # 和一个空白 div。
这样可以打印出这个页面,并且可以手动将任务写在以后可以手写的页面上。
正在发生的问题是数据库很好地显示了分配的人员和任务。但是,如果他们没有被分配任务,那么对于他们过去每次分配任务时,都会为每个数据库条目显示人员及其 ID # 和空白 div。因此,我试图集思广益,如果没有为该人分配任务,则 else if 显示该人、ID、任务一次(而不是多次)。
【问题讨论】:
-
我假设您的 select distinct 没有做您想做的事情,因为“任务”列每次都不同。