0

次のようにSQLクエリでdistinctを使用できる場合、私はそれを知っています:

SELECT DISTINCT column_name FROM table_name;

すべての一意の一致データをプルして、ループで何度も複製されないようにするため。私は、結合を使用する SELECT ステートメントがあるというちょっとした難問を抱えています。すべてがうまくいっています。私が作成したそのループから、IF ステートメントと Else ステートメントがあります。データが特定の日付範囲内にある場合、関連するデータが表示されます。ただし、日付範囲に収まらない場合は、データの一部を表示したいだけです。

問題は、else ステートメントが、データベースの各行でデータが繰り返されるたびにデータを複製することを意図していることです。今、私は本当に2つの別々のクエリを使用したくないので、誰かが過去にこれを経験したことがあるかどうか、そしてそれを回避するために何をしたかを見ています。

私が何を得ているのか理解できない人のために、コードを含めます。

    // 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 条件の横に置きます。私はこれを2つのクエリに分割する必要があると思っていますが、生活を楽にするために、日付範囲の間にその人に割り当てられたタスクがあるかどうかを基本的に確認し、その人の名前、ID番号、および割り当てられたタスク。タスクが割り当てられていない場合は、代わりに (else if を使用して) 名前、ID #、および空白の div を表示します。

このようにして、このページを印刷し、タスクをページに手動で書き込むことができ、後で手動で書き込むことができます。

何が起こっているかの問題は、データベースが割り当てられた人とタスクをうまく表示していることです。ただし、タスクが割り当てられていない場合は、過去にタスクが割り当てられるたびに、データベース エントリごとに人物と ID 番号、および空白の div が表示されます。そのため、人にタスクが割り当てられていない場合、else if が人、ID、タスクを 1 回 (複数回ではなく) 表示する方法をブレインストーミングしようとしています。

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 に答える