1

現在、1 つのフォーム内に複数の検索フィールドがあり、ユーザーがどれを選択してフィルター処理するかを選択できます。日付範囲を追加するまで、すべてが完全に機能します。フィルターする他のフィールドなしで日付範囲を単独で追加すると機能するので、クエリを間違って書いているわけではないことがわかります。これを理解するのを手伝ってください。ありがとう!

これは機能するクエリです: (また、何らかの理由で SELECT * を実行しても機能しません。表示するすべてのフィールドの名前を入力する必要があります)

日付範囲を含むフォームの部分が含まれます。

<li class="form-line form-line-column" id="id_29">
    <label class="form-label-top" id="label_29" for="input_30">
        From Date:
    </label>
    <div id="cid_29" class="form-input-wide">
        <input type="text" class="form-textbox validate" id="datepicker" name="from_date" size="10" />
    </div>
</li>
<li class="form-line form-line-column" id="id_29">
    <label class="form-label-top" id="label_29" for="input_8">
        To Date:
    </label>
    <div id="cid_29" class="form-input-wide">
        <input type="text" class="form-textbox validate" id="datepicker2" name="to_date" size="10" />
    </div>
</li> 

<?php
    $sso = $_GET['sso'];
    $assigned_to = $_GET['assigned_to'];
    $case_status = $_GET['case_status'];
    $startdate = $_GET['from_date'];
    $enddate = $_GET['to_date'];
    $subject = $_GET['subject'];

    $sql = ("SELECT 
                id, sso, full_name, case_status, assigned_to, resolution, 
                description, updated, created, additional_notes, subject
            FROM rmstable2
            WHERE 
                sso LIKE '%$sso%' AND
                case_status LIKE '%$case_status%' AND
                assigned_to LIKE '%$assigned_to%' AND
                subject LIKE '%$subject%'");
?>

これは私が欲しいクエリです:

<?php
    $sql = ("SELECT 
                id, sso, full_name, case_status, assigned_to, resolution, 
                description, updated, created, additional_notes, subject
             FROM rmstable2
             WHERE 
                sso LIKE '%$sso%' AND
                case_status LIKE '%$case_status%' AND
                assigned_to LIKE '%$assigned_to%' AND
                subject LIKE '%$subject%'
                AND created >= '$startdate'
                AND created <= '$enddate'");
?>
4

4 に答える 4

2

そのために使用BETWEENし、日付をラップすることを忘れないでくださいDATE( )

$sql = ("SELECT id, sso, full_name, case_status, assigned_to, 
                resolution, description, updated, created, 
                additional_notes, subject 
        FROM  rmstable2 
        WHERE sso LIKE '%$sso%' AND 
              case_status LIKE '%$case_status%' AND 
              assigned_to LIKE '%$assigned_to%' AND 
              subject LIKE '%$subject%' AND 
              DATE(created) BETWEEN DATE('$startdate') AND DATE('$enddate')");

更新 1

ANDに変えてみてはどうですかOR

$sql = ("SELECT id, sso, full_name, case_status, assigned_to, 
                resolution, description, updated, created, 
                additional_notes, subject 
        FROM  rmstable2 
        WHERE sso LIKE '%$sso%' OR 
              case_status LIKE '%$case_status%' OR
              assigned_to LIKE '%$assigned_to%' OR 
              subject LIKE '%$subject%' OR
              (DATE(created) BETWEEN DATE('$startdate') AND DATE('$enddate'))");
于 2012-08-08T14:42:12.197 に答える
0

値が正しくフォーマットされていると仮定すると、次のように最終クエリで DATE(created) を使用してみることができます。

AND DATE(created) >= '$startdate' AND DATE(created) <= '$enddate'

または、次のような BETWEEN を使用することもできます。

AND DATE(created) BETWEEN '$startdate' AND '$enddate'
于 2012-08-08T14:44:02.213 に答える
0
// assuming date is like YYYY-MM-DD, or you can explode the time to create an timestamp
// assuming your date field in the database is date
// you can remove FROM_UNIXTIME if your field is not date

$startdate = strtotime($_GET['from_date']);
$enddate = strtotime($_GET['to_date']);


$addQuery = "";

if(isset($startdate)){
     $addQueryStart = "created >= FROM_UNIXTIME($startdate)";
}
if(isset($startdate)){
     $addQueryEnd = "created <= FROM_UNIXTIME($enddate)";
}

if(isset($startdate) && isset($enddate)){
    $addQuery .= "AND (".$addQueryStart." AND ".$addQueryEnd.")";
} elseif(isset($startdate) && !isset($enddate)){
    $addQuery .= "AND ".$addQueryStart;
} elseif(!isset($startdate) && isset($enddate)){
    $addQuery .= "AND ".$addQueryEnd;
}



$sql = "
    SELECT id, sso, full_name, case_status, assigned_to, resolution, description, updated, created, additional_notes, subject 
    FROM rmstable2 
    WHERE 
        sso LIKE '%$sso%' AND 
        case_status LIKE '%$case_status%' AND 
        assigned_to LIKE '%$assigned_to%' AND 
        subject LIKE '%$subject%' ".$addQuery;

後で編集:さまざまな状況で

于 2012-08-08T14:44:27.670 に答える
0

ベスト プラクティスは echo $sql; 、生成されたクエリを使用して phpmyadmin に貼り付けることです (そのようなものがある場合)。その他の便利なコマンドはecho mysql_error().

あなたの場合、おそらく日付形式が正しいかどうかを確認する必要があります(YYYY-MM-DDである必要があります)

これも作って AND created >= '$startdate' AND created <= '$enddate'");

これに AND created >= '" . $startdate . "' AND created <= '" . $enddate . "'");

なぜなら...

$a=1;
echo '$a';

出力します

$a
于 2012-08-08T14:40:22.303 に答える