2013-02-09 61 views
1

我有一個mysql查詢在php中運行。Mysql:比較工作不正常

$result = mysql_query("SELECT status,initiated_by,create_timestamp,extension_id, 
    product_code,prospect_name,prospect_email1,prospect_phone1,prospect_title, 
    prospect_company,prospect_message,track_id 
    FROM prospect_requests 
    WHERE subscriber_id = '$subscriberid' 
     AND create_timestamp >='$start_date' 
     AND create_timestamp <= '$end_date'"); 

有兩個屬性名稱$start_date$end_date

我的問題是,爲什麼上面的查詢沒有返回的$end_date

下面是場景的信息。

我已選擇$start_date作爲01-02-2013和$end_date作爲09-2-2013。

但上面的查詢沒有返回2月9日的細節。

請幫我一把。

更新

當我把日期2月10日它返回我2月9日的細節

表結構

CREATE TABLE `prospect_requests` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `customer_id` varchar(255) NOT NULL, 
    `subscriber_id` varchar(255) NOT NULL, 
    `extension_id` varchar(255) DEFAULT NULL, 
    `vendor_number` varchar(255) DEFAULT NULL, 
    `product_code` varchar(255) DEFAULT NULL, 
    `prospect_email1` varchar(255) DEFAULT NULL, 
    `prospect_phone1` varchar(255) DEFAULT NULL, 
    `prospect_email2` varchar(255) DEFAULT NULL, 
    `prospect_phone2` varchar(255) DEFAULT NULL, 
    `prospect_title` varchar(255) DEFAULT NULL, 
    `prospect_company` varchar(255) DEFAULT NULL, 
    `prospect_name` varchar(255) DEFAULT NULL, 
    `prospect_message` text, 
    `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `update_timestamp` datetime DEFAULT NULL, 
    `status` int(11) DEFAULT '0', 
    `track_id` varchar(255) NOT NULL, 
    `initiated_by` varchar(255) DEFAULT NULL, 
    `subscriber_email` varchar(255) DEFAULT NULL, 
    `vendor_email` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=142 DEFAULT CHARSET=latin1; 

輸入:$ START_TIME = 2013-02- 01

 $end_time = 2013-02-09 
+0

什麼是create_timestamp的數據類型? – 2013-02-09 08:01:50

+0

我真的希望這不是現場;它很容易受到注入攻擊。 – Daedalus 2013-02-09 08:01:58

+0

您的開始日期和結束日期不具有相同的日期格式。 – 2013-02-09 08:02:37

回答

0

條件<= '$end_date'是基本相同<= '$end_date 00:00:00'

如果您需要這一天本身,你可以查詢這樣的:

... create_timestamp <= '$end_date 23:59:59' 

create_timestamp BETWEEN '$start_date' AND '$end_date 23:59:59'將工作太。

替代

添加1天編程和使用<

$end_date = date('Y-m-d', strtotime("$end_date +1 day")); 

... create_timestamp < '$end_date' 

更新

您也可以施放時間戳日期第一:

DATE(create_timestamp) BETWEEN '$start_date' AND '$end_date' 
+0

謝謝我以同樣的方式解決問題,因爲你討論過我使用1 INTERVAL DAY – masterofdestiny 2013-02-09 11:50:59

0

日期應該在fo rmat YYYY-MM-DD

此外,您還可以使用WHERE create_timestamp BETWEEN '...' AND '...'作爲邊界值的更有效的條件。

+0

如果日期格式錯誤,那麼爲什麼它會過濾下一個日期 – masterofdestiny 2013-02-09 08:07:01

0

用於比較的約會,你應該將BETWEEN運營商在MySQL查詢像繼w2school

的運營商之間

$result = mysql_query("SELECT 
status,initiated_by,create_timestamp,extension_id,product_code,prospect_name, 
prospect_email1,prospect_phone1,prospect_title,prospect_company,prospect_message, 
track_id from prospect_requests WHERE subscriber_id = '$subscriberid' AND 
create_timestamp BETWEEN '$start_date' AND '$end_date'"); 

請充分說明,如果仍然沒有工作,那麼再請更新表結構

你的問題

我看你是使用timestamp字段類型導致的問題,請參見下面的鏈接,可能是有益的更新問題Comparing timestamp with date variable (MySQL and PHP)

+0

http://w3fools.com/可能對您有意思。 – 2013-02-09 08:11:27

+0

我粘貼相同仍然工作。我只是更新我的表結構 – masterofdestiny 2013-02-09 08:17:02

+0

請閱讀我更新的答案@masterofdestiny – 2013-02-09 08:23:14