我正在使用CodeIgniter進行搜索,它將查詢數據庫。如果用戶只填寫一個字段,則MySQL查詢不起作用
這三個字段分別是「位置」(下拉列表),「日期」(日期)和「事件類型」(下拉列表)。
我目前使用的代碼是:
public function search_flyers($location, $date) {
$date = $this->utils_model->get_sql_date($date);
$query = $this->db->query("SELECT *, flyers.fid FROM flyers
LEFT JOIN event_dates ON flyers.fid = event_dates.fid
WHERE ((flyers.interval='weekly'
AND DATEDIFF('" . $date . "',flyers.start_date)%7=0
AND '" . $date . "' <= flyers.end_date)
OR (flyers.interval='fornightly'
AND DATEDIFF('" . $date . "',flyers.start_date)%14=0
AND '" . $date . "' <= flyers.end_date)
OR (flyers.interval='manual'
AND event_dates.date = '" . $date . "'
OR flyers.start_date = '".$date."'
AND '".$date."' <= flyers.end_date) AND flyers.approved = 1)
AND flyers.location = '".$location."'
GROUP BY flyers.fid
ORDER BY flyers.start_date ASC");
$data['flyers'] = $query->result();
$data['rows'] = $query->num_rows();
return $data;
提到的「間隔」字段一起被使用的事件日期摸出如果事件落在用戶搜索的日期。
該活動還必須獲得批准才能在搜索結果中顯示。
問題是如果用戶只填寫一個字段,表單不起作用。
以前的開發人員編寫了這些代碼,我負責完成它的工作。
通常我會將AND flyers.location...
更改爲OR flyers.location
,但這意味着它會返回您指定的日期或位置的結果。
你有一些規定說你必須要做到這一點它的一部分在SQL查詢中?如果性能不是一個大問題 - 我只會建議從PHP代碼中進行日期檢查。 – Avisra 2011-05-07 21:24:19
在查詢數據庫之前,在PHP中執行操作會更容易,但我不知道如何執行此操作? – Amz 2011-05-09 08:29:12